Neuer Abschnitt: Auf Tastendruck warten
This commit is contained in:
parent
50ed10a887
commit
84abd69c4a
@ -388,10 +388,10 @@ kill $watchdogpid > /dev/null 2>&1
|
||||
exit 0
|
||||
\end{lstlisting}
|
||||
|
||||
Dann wird durch ein \texttt{wait}\index{wait} darauf gewartet, daß sich der
|
||||
überwachte Prozeß beendet. Dabei würde \texttt{wait} bis in alle Ewigkeit
|
||||
warten, wäre da nicht der Watchdog in der Subshell. Wenn dem die Ausführung zu
|
||||
lange dauert, sorgt er dafür daß der Prozeß beendet wird.
|
||||
Dann wird durch ein \texttt{wait}\index{wait=\texttt{wait}} darauf gewartet,
|
||||
daß sich der überwachte Prozeß beendet. Dabei würde \texttt{wait} bis in alle
|
||||
Ewigkeit warten, wäre da nicht der Watchdog in der Subshell. Wenn dem die
|
||||
Ausführung zu lange dauert, sorgt er dafür daß der Prozeß beendet wird.
|
||||
|
||||
Kommt der überwachte Prozeß aber rechtzeitig zurück, sorgt \texttt{kill} in
|
||||
Zeile 8 dafür daß der Wachhund `eingeschläfert' wird.
|
||||
@ -399,3 +399,36 @@ Zeile 8 daf
|
||||
Auf diese Weise ist sichergestellt, daß der \texttt{ping} auf keinen Fall
|
||||
länger als fünf Sekunden läuft.
|
||||
|
||||
|
||||
\section{Unter Druck: Auf Tasten warten}\label{tastendruck}\index{Tastendruck}
|
||||
|
||||
Oft baut man in längere Ausgaben eine Art Warte-Prompt im Stile von `Bitte
|
||||
Enter drücken um fortzufahren' ein. Gewartet wird dann mit Hilfe des
|
||||
\texttt{read}-Kommandos\index{read=\texttt{read}}.
|
||||
|
||||
Will man nicht nur auf den Druck der Enter-Taste reagieren, sondern auf einen
|
||||
beliebigen Tastendruck, eignet sich das folgende Konstrukt:
|
||||
|
||||
\begin{lstlisting}
|
||||
stty raw -echo
|
||||
inputchar=`dd if=/dev/tty bs=1 count=1 2> /dev/null`
|
||||
stty sane
|
||||
\end{lstlisting}
|
||||
|
||||
Zur Erklärung: Mit dem Kommando \texttt{stty}\index{stty=\texttt{stty}} kann
|
||||
ein Terminal konfiguriert werden. Dabei kann es sich sowohl um eine Leitung wie
|
||||
die serielle Schnittstelle des Rechners handeln, als auch um das Terminal an
|
||||
dem der Benutzer sitzt. Jedes Terminal hat eine Reihe von Eigenschaften.
|
||||
Mittels \lstinline|stty raw -echo| wird das Terminal in einen passenden Modus
|
||||
geschaltet. Das \texttt{-echo} sorgt dafür, daß eingegebene Zeichen nicht in
|
||||
der Konsole wiedergegeben werden.
|
||||
|
||||
Danach wird mit \texttt{dd}\index{dd=\texttt{dd}} genau ein Zeichen eingelesen.
|
||||
Die Fehlerausgabe von \texttt{dd} wird dabei nach /dev/null umgeleitet, da
|
||||
ansonsten auf der Konsole die Erfolgsmeldungen \textit{1+0 Datensätze ein, 1+0
|
||||
Datensätze aus} erscheinen würden. Das gelesene Zeichen wird in der Variablen
|
||||
\texttt{\$inputchar} gesichert und steht somit zur Verfügung.
|
||||
|
||||
Nach dem Einlesevorgang wird die Konsole schließlich mittels
|
||||
\lstinline|stty sane| wieder in einen benutzbaren Zustand zurückversetzt.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user