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.

28 2 Programmieren <strong>mit</strong> <strong>Unix</strong>-Prozessen<br />

Sehen wir uns nun den Inhalt der eben erzeugten Beispieldatei read.data <strong>mit</strong><br />

den Systemkommandos cat <strong>und</strong> wc etwas genauer an:<br />

$ cat read.data<br />

0123<br />

4567<br />

89ab<br />

cdef<br />

ghij<br />

klmn<br />

opqr<br />

stuv<br />

wxyz<br />

$ wc read.data<br />

9 9 45 read.data<br />

14–20<br />

22–32<br />

34–39<br />

41–46<br />

Die Datei besteht also wie erwartet aus neun Zeilen <strong>mit</strong> insgesamt neun<br />

Wörtern“ bestehend aus je vier Ziffern bzw. Buchstaben. Die Gesamtzahl<br />

”<br />

von 45 Zeichen erklärt sich aus den zusätzlich gezählten Zeilenumbrüchen, also<br />

dem Newline-Zeichen ’\n’ am Ende jeder Zeile. Jede Zeile besteht da<strong>mit</strong><br />

also insgesamt aus fünf Zeichen, den vier Ziffern bzw. Buchstaben <strong>und</strong> dem<br />

abschließenden Zeilenumbruch.<br />

Das nächste Programm, Beispiel 2.3, liest die zuvor erzeugte Datei wieder ein<br />

<strong>und</strong> gibt den Inhalt auf der Standardausgabe aus.<br />

Zunächst wird read.data <strong>mit</strong>tels open() geöffnet. Das Flag O_RDONLY gibt<br />

dabei an, daß die Datei ausschließlich gelesen <strong>und</strong> nicht etwa beschrieben<br />

werden soll. Im Fehlerfall, falls die Datei also z. B. nicht existiert, wird die<br />

genaue Ursache des Problems ausgegeben <strong>und</strong> das Programm beendet sich<br />

<strong>mit</strong> einem passenden Rückgabewert.<br />

Danach werden von read() 45 Zeichen, das ist die Größe des Felds data, aus<br />

der geöffneten Datei angefordert. Da unsere Beispieldatei genau 45 Zeichen<br />

enthält, sollte der Inhalt also auf einen Rutsch eingelesen werden können.<br />

Falls ein Fehler auftritt, falls also der Rückgabewert von read() kleiner 0 sein<br />

sollte, bricht das Programm <strong>mit</strong> einer entsprechenden Fehlermeldung ab. Für<br />

den Fall, daß nicht genügend Zeichen gelesen werden konnten, wird lediglich<br />

eine Warnung erzeugt.<br />

Anschließend können die gelesenen Daten über die Standardausgabe wieder<br />

ausgegeben werden.Anstatt STDOUT_FILENO, die Konstante wird in der<br />

Header-Datei definiert, hätten wir kürzer den Wert 1 einsetzen<br />

können, doch zur besseren Dokumentation verwenden wir die sprechende Alternative.<br />

Natürlich ist auch bei der Ausgabe auf etwaige Fehler zu achten.<br />

Abschließend wird die Datei wieder geschlossen <strong>und</strong> das Programm beendet<br />

sich. Auch hier kann durch einen Schreib- oder Lesefehler des Dateisystems

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!