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.

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

Im weiteren Verlauf dieses Kapitels werden wir noch Beispiele sehen, bei denen<br />

zwei oder mehr Dateideskriptoren die selbe Beschreibung referenzieren.<br />

2.2.2 Elementare Ein- <strong>und</strong> Ausgabe<br />

Jede der elementaren Ein- <strong>und</strong> Ausgabefunktionen stellt im <strong>Unix</strong>-System eine<br />

direkte Schnittstelle zum Betriebssystem-Kern dar. Ein Aufruf dieser Funktionen<br />

bewirkt also immer einen Systemaufruf. Die Ein- <strong>und</strong> Ausgabe <strong>mit</strong>tels<br />

read() <strong>und</strong> write() wird auch oft als ungepufferte Ein- <strong>und</strong> Ausgabe bezeichnet,<br />

da hier – im Gegensatz zur Ein- <strong>und</strong> Ausgabe <strong>mit</strong> den Funktionen<br />

der C-Bibliothek – auf Prozeßebene keine Pufferung der Daten vollzogen wird.<br />

Mit der Funktion open() wird eine Datei <strong>mit</strong> einem Dateideskriptor verknüpft.<br />

Wie in Abschnitt 2.2.1 erläutert, wird eine neue Beschreibung der<br />

geöffneten Datei sowie ein Dateideskriptor, der diese Beschreibung referenziert,<br />

erstellt. Das Argument path gibt Pfad <strong>und</strong> Namen der zu öffnenden<br />

Datei an. Der Dateistatus <strong>und</strong> der Zugriffsmodus auf die Datei kann durch den<br />

Parameter oflag beeinflußt werden. Werte für oflag werden durch bitweise<br />

Oder-Verknüpfung geeigneter Attribute aus erzeugt. Der zurückgelieferte<br />

Dateideskriptor wird im weiteren dazu verwendet, auf der geöffneten<br />

Datei zu arbeiten.<br />

#include<br />

<br />

int open( const char *path, int oflag , ... );<br />

Ein Rückgabewert von -1 signalisiert, daß beim Öffnen der Datei ein Fehler<br />

aufgetreten ist. Ansonsten liefert open() einen gültigen Dateideskriptor, also<br />

einen Integer-Wert ≥ 0. Der Dateideskriptor ist gleichzeitig der kleinste freie<br />

Index in der Dateideskriptor-Tabelle. Im Fehlerfall findet sich die Fehlerursache<br />

in errno.<br />

Neue Dateien können durch open() erstellt werden, wenn beim Aufruf das<br />

Flag O_CREAT in oflag enthalten ist. In diesem Fall hat open() ein drittes<br />

Argument mode vom Typ mode_t, das die Zugriffsrechte der neuen Datei<br />

festlegt. Die gewünschten Zugriffsrechte werden dabei durch bitweise Kombination<br />

geeigneter Attribute aus konstruiert.<br />

Mit der Funktion read() können Daten aus einer Datei gelesen werden. Dazu<br />

muß natürlich der übergebene Dateideskriptor fildes <strong>mit</strong> einer bereits<br />

geöffneten Datei verknüpft sein.<br />

#include<br />

<br />

ssize_t read( int fildes , void *buf, size_t nbyte );

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!