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.

2.1 <strong>Unix</strong>-Prozesse 19<br />

15 printf( "Kann Exit-Handler nicht registrieren.\n" );<br />

16 exit( EXIT_FAILURE );<br />

17 }<br />

18<br />

19 printf( "Irgendwie ... " ); /* Ausgabe wird gepuffert */<br />

20<br />

21 if( argc > 1 )<br />

22 {<br />

23 if( strcmp( argv[1], "exit" ) == 0 )<br />

24 exit( EXIT_SUCCESS );<br />

25 else<br />

26 _exit( EXIT_SUCCESS );<br />

27 }<br />

28<br />

29 printf( "<strong>und</strong> sowieso.\n" );<br />

30<br />

31 return( EXIT_SUCCESS );<br />

32 }<br />

Mit Hilfe von Beispiel 2.1 <strong>und</strong> den verschiedenen Aufruf-Parametern kann<br />

man sehr schön die unterschiedliche Wirkung der Exit-Funktionen verdeutlichen.<br />

Ohne Argumente wird das Programm komplett durchlaufen. Nach dem<br />

abschließenden return wird implizit die Funktion exit() aufgerufen. Der<br />

registrierte Exit-Handler wird durchlaufen, die Puffer aller noch offenen Datenströme<br />

werden geschrieben <strong>und</strong> danach werden die Ströme <strong>mit</strong> fclose()<br />

geschlossen. Die Ausgabe des Programms ist in diesem Fall also die folgende:<br />

Irgendwie ... <strong>und</strong> sowieso.<br />

Sir Quickly räumt auf.<br />

Wird dem Programm beim Aufruf exit als Argument übergeben, so beendet<br />

es sich bereits vorzeitig <strong>mit</strong> exit(). Diesführt dazu, daß im Gegensatz zur<br />

ersten Variante die zweite printf()-Ausgabe nicht mehr erfolgt. Dennoch<br />

werden nach der Abarbeitung der Exit-Handler die Puffer aller noch offenen<br />

Datenströme geschrieben <strong>und</strong> die Ströme werden <strong>mit</strong> fclose() geschlossen.<br />

Die Ausgabe von Beispiel 2.1 ist demnach wie folgt:<br />

Irgendwie ... Sir Quickly räumt auf.<br />

Wird das Programm <strong>mit</strong> einem Parameter ungleich exit gestartet, also z. B.<br />

<strong>mit</strong> _exit, so beendet sich der Prozeß vorzeitig über den Aufruf von _exit().<br />

Das führt dazu, daß – im Unterschied zu den ersten beiden Fällen – die Puffer<br />

der noch offenen Datenströme nicht mehr geschrieben werden. Auch die<br />

registrierten Exit-Handler werden nicht ausgeführt. Im konkreten Fall führt<br />

das dazu, daß das Programm überhaupt keine Ausgabe erzeugt. Die erste

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!