Neuer Abschnitt: Auf Tastendruck warten
This commit is contained in:
@ -388,10 +388,10 @@ kill $watchdogpid > /dev/null 2>&1
|
|||||||
exit 0
|
exit 0
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Dann wird durch ein \texttt{wait}\index{wait} darauf gewartet, da<64> sich der
|
Dann wird durch ein \texttt{wait}\index{wait=\texttt{wait}} darauf gewartet,
|
||||||
<EFBFBD>berwachte Proze<7A> beendet. Dabei w<>rde \texttt{wait} bis in alle Ewigkeit
|
da<EFBFBD> sich der <EFBFBD>berwachte Proze<7A> beendet. Dabei w<>rde \texttt{wait} bis in alle
|
||||||
warten, w<>re da nicht der Watchdog in der Subshell. Wenn dem die Ausf<73>hrung zu
|
Ewigkeit warten, w<>re da nicht der Watchdog in der Subshell. Wenn dem die
|
||||||
lange dauert, sorgt er daf<61>r da<64> der Proze<7A> beendet wird.
|
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
|
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.
|
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
|
Auf diese Weise ist sichergestellt, da<64> der \texttt{ping} auf keinen Fall
|
||||||
l<EFBFBD>nger als f<>nf Sekunden l<>uft.
|
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.
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user