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 25<br />

Die Funktion read() versucht, genau nbyte Bytes über den spezifizierten<br />

Dateideskriptor in den übergebenen Puffer buf einzulesen. Die Maximalgröße<br />

für nbyte wird vom System über die Konstante SSIZE_MAX festgelegt. Im<br />

Erfolgsfall liefert read() eine nicht-negative ganze Zahl, nämlich die Anzahl<br />

der tatsächlich eingelesenen Bytes zurück. Wird der Wert 0 zurückgeliefert,<br />

so ist das Ende der Datei bzw. des Datenstroms erreicht. Ein Rückgabewert<br />

von -1 signalisiert, daß beim Lesen der Daten ein Fehler aufgetreten ist. Die<br />

genaue Fehlerursache findet sich in diesem Fall in errno.<br />

Selbstverständlich ist die Anzahl der gelesenen Bytes niemals größer als nbyte.<br />

Es kann aber durchaus vorkommen, daß weniger als nbyte Bytes gelesen werden,<br />

z. B. wenn read() durch ein Signal unterbrochen wurde 2 oder wenn die<br />

zu lesende Datei nicht mehr so viele Daten enthält wie eingelesen werden sollen.<br />

Beispiel: Eine Datei enthält 50 Zeichen, das Programm versucht aber,<br />

100 Zeichen einzulesen. Auch beim Lesen von speziellen Geräten wie Terminal<br />

oder Bandlaufwerk kann es vorkommen, daß weniger Bytes als gefordert<br />

gelesen werden. Mehr dazu in den Beispielen 2.3 <strong>und</strong> 2.4.<br />

Mit der Funktion write() können Daten über einen Dateideskriptor in eine<br />

zuvor geöffnete Datei geschrieben werden. write() hat die gleichen Parameter<br />

wie die read()-Funktion, nur dient diesmal der Puffer als Quelle <strong>und</strong> der<br />

Dateideskriptor als Ziel.<br />

#include<br />

<br />

ssize_t write( int fildes , const void *buf,<br />

size_t nbyte );<br />

Aus dem übergebenen Puffer buf werden genau nbyte Bytes über den Dateideskriptor<br />

ausgegeben. Wurde die Datei <strong>mit</strong> dem Attribut O_APPEND geöffnet,<br />

so werden die Daten jeweils ans Dateiende angefügt. Auch hier ist die Maximalgröße<br />

für nbyte vom System über die Konstante SSIZE_MAX festgelegt. Im<br />

Erfolgsfall gibt write() die Anzahl der tatsächlich ausgegebenen Bytes als<br />

ganze Zahl größer 0 zurück. Ein Rückgabewert von -1 signalisiert, daß beim<br />

Schreiben der Daten ein Fehler aufgetreten ist. Die genaue Fehlerursache findet<br />

sich dann in errno.<br />

Auch bei write() ist die Anzahl der geschriebenen Bytes niemals größer als<br />

nbyte. Wie bei read() kann es bei write() natürlich ebenfalls vorkommen,<br />

daß weniger als nbyte Bytes geschrieben werden, z. B. wenn write() durch<br />

2 In früheren Versionen des Standards war es optional, ob read() in diesem Fall<br />

die Anzahl der bereits eingelesenen Bytes liefert, oder den Fehlerwert -1 zurück<br />

gibt <strong>und</strong> errno auf EINTR setzt.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!