next up previous contents
Next: System V IPC Up: Interprozesskommunikation Previous: Pipes   Contents

Named Pipes

Named Pipes sind den normalen Pipes sehr ähnlich. Sie haben jedoch einen entscheidenden Vorteil: hiermit kann eine schon existierende Pipe von beliebigen Prozessen genutzt werden. Bei normalen Pipes müssen dazu die Prozesse vom selben Elternprozess abstammen (um an die Dateideskriptoren ranzukommen).

Man kann eine Named Pipe mit dem Befehl

mkfifo Name
erzeugen. Aufgrund des Befehls werden Named Pipes häufig auch als FIFOs bezeichnet. Dies ist zwar richtig, da sie nach dem FIFO (First In First Out) Prinzip funktionieren, jedoch arbeiten die normalen (temporären) Pipes nach dem selben Prinzip, würde also als unterscheidende Bezeichnung nicht passen.

Um das Beispiel von oben mit Named Pipes umzusetzen tut man folgendes (fifo ist die zuvor angelegte Named Pipe):

ls -la > fifo
Nun liest ein anderer Prozess die Daten aus der Named Pipe wieder aus:

more fifo
Die Named Pipe existiert weiter und kann weiter benutzt werden.

Im Gegensatz zu normalen Pipes wo in einem Schritt die Pipe erzeugt wird (ein inode Objekt, zwei file Objekte und die Speicherseite) und gleich zum Lesen und Schreiben geöffnet ist, werden Named Pipes von den Prozessen im Userspace geöffnet und geschlossen. Dabei beachtet Linux, dass es möglich ist, dass eine Pipe zum Lesen geöffnet wird bevor etwas hineingeschrieben wurde, sowie dass eine Pipe zum Schreiben geöffnet wird bevor sie auch zum Lesen geöffnet wurde.

Zum Anlegen einer Named Pipe bedient man sich des mknod() Systemaufrufs. Auf Kernelebene passiert dort das gleiche bei beim erzeugen einer Device Datei.

Das Lesen und Schreiben auf eine Named Pipe funktioniert auf die gleiche Weise wie bei normalen Pipes mit den Systemaufrufen read() und write() bzw. auf Kernelebene mit den Funktionen pipe_read() und pipe_write().

Obwohl es auch hier es möglich ist, dass mehrere Prozesse die selbe Named Pipe benutzen, können Daten nur in 1:1 Beziehungen ausgetauscht werden. D.h. Daten die ein Prozess in die Pipe schreibt können nur von einem Prozess gelesen werden.


next up previous contents
Next: System V IPC Up: Interprozesskommunikation Previous: Pipes   Contents
2002-02-17