05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

2.4 Signale 67<br />

54 printf( "Leider falsch , richtig ist %s", antwort );<br />

55<br />

56 exit( EXIT_SUCCESS );<br />

57 }<br />

8–12<br />

20–29<br />

31–38<br />

Die Signalbehandlungsroutine signal_handler() wurde so modifiziert, daß<br />

sie nach einem entsprechenden Hinweis den Prozeß sofort durch exit() beendet.<br />

Da die Routine nur noch für das Signal SIGALRM installiert wird, entfällt<br />

die Fallunterscheidung nach dem zu behandelnden Signal.<br />

Die Signalbehandlung für das Signal SIGINT wird auf ignorieren gesetzt. Wird<br />

am Terminal die Abbruchtaste betätigt, so wird dem Prozeß zwar das Signal<br />

ausgeliefert, das Signal wird von diesem jedoch ohne explizite Behandlung<br />

verworfen.<br />

Für das Signal SIGALRM kommt weiterhin die Funktion signal_handler()<br />

zum Einsatz. Die Elemente sa_mask <strong>und</strong> sa_flags wurden bereits oben initialisiert<br />

<strong>und</strong> müssen nicht neu gesetzt werden.<br />

Mit den jüngsten Änderungen verhält sich das Programm nun genau wie vorgegeben.<br />

Erfolgt innerhalb der 20 Sek<strong>und</strong>en eine Eingabe, so wird die Antwort<br />

überprüft <strong>und</strong> das Ergebnis ausgegeben:<br />

$ ./quiz2<br />

Sie haben 20 Sek<strong>und</strong>en für die Antwort:<br />

Was ißt Sir Quickly am liebsten?<br />

Himbeerjoghurt<br />

Die Antwort ist richtig. Gratulation.<br />

Wird innerhalb der Bedenkzeit keine Antwort gegeben, so bricht das Programm<br />

nach Ablauf des vorgegebenen Zeitintervalls ab. Auch das Drücken<br />

der Abbruchtaste verhindert dieses Verhalten nicht mehr:<br />

$ ./quiz2<br />

Sie haben 20 Sek<strong>und</strong>en für die Antwort:<br />

Was ißt Sir Quickly am liebsten?<br />

Ihre Bedenkzeit ist abgelaufen.<br />

Neben der bereits ausführlich beschriebenen sigaction()-Funktion stellt der<br />

ANSI/ISO C Standard die signal()-Funktion zur Beeinflussung der Signalbehandlung<br />

bereit. Auch <strong>mit</strong> signal() kann für ein Signal eine eigene Signalbehandlung<br />

gesetzt werden.<br />

#include<br />

<br />

void (*signal(int sig, void (*func)(int)))(int);

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!