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.2 Ein- <strong>und</strong> Ausgabe 35<br />

Blick überraschend, denn der Aufruf von printf() erfolgt laut Quelltext ja<br />

vor dem Aufruf von write().<br />

$ ./read-data-stdin > output<br />

0123<br />

$ cat output<br />

0123<br />

Konnte nur 5 Bytes lesen.<br />

Wie wir bereits gelernt haben, stellen die elementaren Ein- <strong>und</strong> Ausgabefunktionen<br />

unter <strong>Unix</strong> eine direkte Schnittstelle zum Systemkern dar, die Ein- <strong>und</strong><br />

Ausgabe der Daten erfolgt dabei ohne Pufferung auf Prozeßebene. Im Gegensatz<br />

dazu puffern die Funktionen der C-Bibliothek unter Umständen die Ein<strong>und</strong><br />

Ausgabe auf Anwendungsebene.<br />

Dies bedeutet, daß die Ausgabe von "Konnte nur 5 Bytes lesen.\n" in<br />

Beispiel 2.4 unter bestimmten Umständen (mehr dazu im folgenden Abschnitt)<br />

zunächst lediglich in einen Datenpuffer der C-Bibliothek kopiert<br />

wird. Die nachfolgende Ausgabe der Zeichenfolge "0123\n" über write()<br />

erfolgt dagegen immer direkt <strong>und</strong> ungepuffert. Insbesondere kann diese Ausgabe<br />

dadurch eine gepufferte Ausgabe überholen“. Nach der Rückkehr aus<br />

”<br />

der main()-Funktion erledigt exit() schließlich die Aufräumarbeiten <strong>und</strong><br />

schreibt dabei auch die Puffer aller noch geöffneten Dateien.<br />

Die analoge Problematik tritt übrigens auch <strong>mit</strong> einer gemischten Verwendung<br />

der Eingabefunktionen auf. Die Funktionen der C-Bibliothek lesen unter<br />

Umständen bereits mehr Daten in einen internen Datenpuffer, als von der Anwendung<br />

eigentlich angefordert wurden. Die zuviel bzw. auf Vorrat gelesenen<br />

Daten stehen der read()-Funktion dann nicht mehr zur Verfügung.<br />

Das Beispiel zeigt, daß die elementaren Ein- <strong>und</strong> Ausgabefunktionen nicht<br />

abwechselnd <strong>mit</strong> den Ein- <strong>und</strong> Ausgabefunktionen der C-Bibliothek verwendet<br />

werden sollten.<br />

2.2.3 Standardeingabe <strong>und</strong> -ausgabe<br />

In diesem Abschnitt betrachten wir die Ein- <strong>und</strong> Ausgabefunktionen der C-<br />

Bibliothek, die durch den ANSI/ISO C Standard [ISO05] festgelegt sind. Obwohl<br />

ursprünglich für <strong>Unix</strong>-Systeme entwickelt, sind diese Funktionen <strong>mit</strong><br />

der weiten Verbreitung des C-Standards auf nahezu jedem Betriebssystem<br />

verfügbar. Gegenüber den elementaren Ein- <strong>und</strong> Ausgabefunktionen des <strong>Unix</strong>-<br />

Systemkerns zeigen die Funktionen der C-Bibliothek im wesentlichen die folgenden<br />

Unterschiede:

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!