Neuer Abschnitt: Auf Tastendruck warten
This commit is contained in:
		| @@ -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. | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user