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.

70 2 Programmieren <strong>mit</strong> <strong>Unix</strong>-Prozessen<br />

sigaddset() <strong>und</strong> sigdelset() einzelne Signale hinzugefügt oder herausgenommen<br />

werden. Alle Funktionen liefern bei erfolgreicher Ausführung den<br />

Wert 0 zurück. Der Rückgabewert -1 signalisiert wie üblich einen Fehler <strong>und</strong><br />

errno gibt weiteren Aufschluß über die Fehlerursache.<br />

#include<br />

<br />

int sigaddset( sigset_t *set, int signo );<br />

int sigdelset( sigset_t *set, int signo );<br />

int sigemptyset( sigset_t *set );<br />

int sigfillset( sigset_t *set );<br />

int sigismember( const sigset_t *set, int signo );<br />

8–11<br />

18–27<br />

Mit Hilfe der Funktion sigismember() läßt sich schließlich prüfen, ob das<br />

Signal signo in der Signalmenge set enthalten ist. Die Funktion liefert die<br />

Werte 1 oder 0 zurück, je nachdem, ob das gesuchte Signal in der angegebenen<br />

Menge enthalten ist. Der Rückgabewert -1 zeigt an, daß ein interner Fehler<br />

aufgetreten ist, über den errno genauere Auskunft gibt.<br />

Beispiel 2.16 illustriert die eben beschriebenen Funktionen:<br />

Zu Verdeutlichung des Signalverhaltens bereiten wir wieder eine einfache Signalbehandlungsroutine<br />

vor. Mit dieser Funktion wird später das Drücken der<br />

Abbruchtaste am Terminal abgefangen.<br />

Als erstes wird im Hauptprogramm die Funktion signal_handler() zur Behandlung<br />

des Signals SIGINT installiert.<br />

1 #include <br />

2 #include <br />

3 #include <br />

4 #include <br />

5 #include <br />

6 #include <br />

Beispiel 2.16. signal-block.c<br />

7<br />

8 void signal_handler( int sig )<br />

9 {<br />

10 printf( "Abbruchtaste gedrückt.\n" );<br />

11 }<br />

12<br />

13 int main( int argc, char *argv[] )<br />

14 {<br />

15 struct sigaction action;<br />

16 sigset_t sigset , oldset;<br />

17

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!