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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

18 action.sa_handler = signal_handler;<br />

19 sigemptyset( &action.sa_mask );<br />

20 action.sa_flags = 0;<br />

2.4 Signale 71<br />

21<br />

22 if( sigaction( SIGINT , &action , NULL ) < 0 )<br />

23 {<br />

24 printf( "Konnte Handler nicht installieren: %s.\n",<br />

25 strerror( errno ) );<br />

26 return( EXIT_FAILURE );<br />

27 }<br />

28<br />

29 sigemptyset( &sigset );<br />

30 sigaddset( &sigset , SIGINT );<br />

31 sigprocmask( SIG_BLOCK , &sigset , &oldset );<br />

32<br />

33 printf( "Bitte nicht stören ...\n" );<br />

34 sleep( 10 );<br />

35 printf( "Danke.\n" );<br />

36<br />

37 sigprocmask( SIG_SETMASK , &oldset , NULL );<br />

38<br />

39 printf( "Drücken Sie jetzt die Abbruchtaste ...\n" );<br />

40 sleep( 10 );<br />

41 printf( "Ende.\n" );<br />

42<br />

43 exit( EXIT_SUCCESS );<br />

44 }<br />

29–31<br />

33–35<br />

37–40<br />

Danach bereiten wir eine leere Signalmenge sigset vor, nehmen das Signal<br />

SIGINT in die Menge auf <strong>und</strong> weisen den Prozeß an, ab jetzt zusätzlich das<br />

Signal SIGINT zu blockieren.<br />

Anschließend legt sich der Prozeß für 10 Sek<strong>und</strong>en schlafen. Die beiden Ausgaben<br />

markieren lediglich den Beginn <strong>und</strong> das Ende dieser Auszeit“. ”<br />

Abschließend setzt das Programm für den Prozeß wieder die ursprünglich<br />

blockierten Signale <strong>und</strong> wartet danach 10 Sek<strong>und</strong>en lang auf das Drücken der<br />

Abbruchtaste am Terminal.<br />

Wir testen das Programm, indem wir nach dem Programmstart sowohl<br />

während der ersten Phase ( Bitte nicht stören“) als auch während der zweiten<br />

”<br />

Phase ( Drücken Sie jetzt die Abbruchtaste“) die Abbruchtaste am Terminal<br />

”<br />

betätigen. Das Testprogramm zeigt dabei das nachfolgende Verhalten, die<br />

Zeichenfolge ^C steht hier wieder für die Abbruchtaste:<br />

$ ./signal-block<br />

Bitte nicht stören ...<br />

^C

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!