Neuer Abschnitt: Auf Tastendruck warten

This commit is contained in:
rschaten
2005-10-04 10:58:56 +00:00
parent 50ed10a887
commit 84abd69c4a

View File

@ -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<64> sich der
<EFBFBD>berwachte Proze<7A> beendet. Dabei w<>rde \texttt{wait} bis in alle Ewigkeit
warten, w<>re da nicht der Watchdog in der Subshell. Wenn dem die Ausf<73>hrung zu
lange dauert, sorgt er daf<61>r da<64> der Proze<7A> beendet wird.
Dann wird durch ein \texttt{wait}\index{wait=\texttt{wait}} darauf gewartet,
da<EFBFBD> sich der <EFBFBD>berwachte Proze<7A> beendet. Dabei w<>rde \texttt{wait} bis in alle
Ewigkeit warten, w<>re da nicht der Watchdog in der Subshell. Wenn dem die
Ausf<EFBFBD>hrung zu lange dauert, sorgt er daf<61>r da<64> der Proze<7A> beendet wird.
Kommt der <20>berwachte Proze<7A> aber rechtzeitig zur<75>ck, sorgt \texttt{kill} in
Zeile 8 daf<61>r da<64> der Wachhund `eingeschl<68>fert' wird.
@ -399,3 +399,36 @@ Zeile 8 daf
Auf diese Weise ist sichergestellt, da<64> der \texttt{ping} auf keinen Fall
l<EFBFBD>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<64>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<6B>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<61>r, da<64> 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<6E>tze ein, 1+0
Datens<EFBFBD>tze aus} erscheinen w<>rden. Das gelesene Zeichen wird in der Variablen
\texttt{\$inputchar} gesichert und steht somit zur Verf<72>gung.
Nach dem Einlesevorgang wird die Konsole schlie<69>lich mittels
\lstinline|stty sane| wieder in einen benutzbaren Zustand zur<75>ckversetzt.