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

Um eine effiziente Verarbeitung zu erlauben, führt die Standard-Bibliothek<br />

eine Pufferung der Daten durch. Beim lesenden Zugriff werden die Daten vom<br />

Betriebssystem in größeren Blöcken angefordert, egal wieviele Bytes die Anwendung<br />

eigentlich lesen will. Nachfolgende Leseoperationen können dann unter<br />

Umständen ohne weitere Systemaufrufe aus den bereits eingelesen Daten<br />

befriedigt werden. Umgekehrt werden Schreiboperationen zunächst in einen<br />

internen Puffer abgebildet, bevor sie schließlich, z. B. beim Schließen des Datenstroms,<br />

tatsächlich ausgegeben werden.<br />

Die C-Bibliothek unterscheidet dabei die folgenden drei verschiedenen Formen<br />

der Pufferung:<br />

Vollständige Pufferung: Bei dieser Form der Pufferung werden die Daten in<br />

der beschriebenen Form blockweise zwischengespeichert. Daten werden<br />

genau dann geschrieben, wenn der zur Verfügung stehende Puffer komplett<br />

gefüllt ist oder wenn der Datenstrom geschlossen wird. Gelesen werden<br />

neue Daten immer dann, wenn der Lesepuffer komplett geleert ist.<br />

Vollständige Pufferung kommt im Regelfall bei der Bearbeitung von normalen<br />

Dateien zum Einsatz.<br />

Zeilenweise Pufferung: Auch bei dieser Pufferungsart werden die Daten blockweise<br />

zwischengespeichert. Im Unterschied zur vollständigen Pufferung<br />

werden Daten aber schon dann tatsächlich geschrieben, wenn im Datenstrom<br />

ein Zeilentrenner auftritt. Darüber hinaus muß der Puffer natürlich<br />

auch dann geschrieben werden, wenn er komplett gefüllt ist – auch wenn<br />

in diesem Moment kein Zeilentrenner auftaucht. Sollten vom Prozeß Daten<br />

von einem ungepufferten Datenstrom angefordert werden, oder sollten<br />

Daten von einem zeilenweise gepufferten Datenstrom angefordert werden,<br />

die zuerst noch vom System gelesen werden müssen, so wird der Zwischenspeicher<br />

ebenfalls geschrieben. Zeilenweise Pufferung kommt meist<br />

im Umgang <strong>mit</strong> interaktiven Geräten wie z. B. dem Terminal zum Einsatz.<br />

Keine Pufferung: Dies bedeutet, daß von der Standard-Bibliothek keine Pufferung<br />

vorgenommen wird. Jede Ein- <strong>und</strong> Ausgabeoperation wird direkt<br />

an den Systemkern weitergeleitet. Die Fehlerausgabe über stderr ist ein<br />

Beispiel für die ungepufferte Ausgabe von Daten.<br />

ANSI/ISO C <strong>und</strong> IEEE Std 1003.1-2001 legen fest, daß beim Programmstart<br />

stderr, der Datenstrom für die Fehlerausgabe, nicht vollständig gepuffert ist.<br />

Außerdem sind stdin <strong>und</strong> stdout vollständig gepuffert, wenn der jeweilige<br />

Datenstrom nicht <strong>mit</strong> einem interaktiven Gerät wie z. B. einem Terminal verb<strong>und</strong>en<br />

ist. Leider geben diese Vereinbarungen des Standards keine Auskunft<br />

darüber, ob die Fehlerausgabe nun ungepuffert oder zeilenweise gepuffert ist,<br />

oder was für stdin <strong>und</strong> stdout gilt, sofern sie zu einem interaktiven Gerät assoziiert<br />

sind. Allerdings hat es sich auf allen gängigen <strong>Unix</strong>-Systemen etabliert,<br />

daß stderr stets ungepuffert ist <strong>und</strong> daß stdin <strong>und</strong> stdout in Verbindung<br />

<strong>mit</strong> einem Terminal zeilenweise gepuffert sind.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!