Das Kefk Network Wiki befindet sich im Testbetrieb.
Pipe (Informatik)
Aus Kefk.
Die Pipe (englisch für Rohr, Röhre) bezeichnet einen gepufferten uni- oder bidirektionalen Datenstrom zwischen zwei Prozessen nach dem „First In – First Out“-Prinzip.
Inhaltsverzeichnis |
Erzeugen einer Pipe
Nach Anforderung einer Pipe durch den Systemaufruf pipe() werden vom Betriebssystem zwei Zugriffskennungen (engl.: handles) zurückgeliefert, die zum Schreiben in die bzw. Lesen aus der Pipe benötigt werden. Auch Kindprozesse erben den Zugriff auf diese handles. Mit der Beendigung des letzten Prozesses, der Zugriff auf eine aktive Pipe hat, wird diese vom Betriebssystem beendet.
Pipe-Varianten
Es gibt anonyme und benannte Pipes.
Anonyme Pipes unterliegen drei erheblichen Einschränkungen:
- Sie können nur in eine Richtung verwendet werden: ein Prozess schreibt, der andere liest.
- Sie können nur für die Kommunikation zwischen eng verwandten Prozessen benutzt werden.
- Die maximale Datenmenge, die eine Pipe enthalten kann, ist relativ klein.
Benannte Pipes (Named Pipes) können dagegen auch zur Kommunikation zwischen Prozessen eingesetzt werden, die nicht miteinander verwandt sind und sich darüber hinaus auf unterschiedlichen Rechnern innerhalb eines Netzwerkes befinden dürfen. Sie sind flexibler als anonyme Pipes und eignen sich für sogenannte Client-Server-Anwendungen (es lassen sich auch RPCs realisieren). Benannte Pipes ermöglichen die gleichzeitige Kommunikation in beide Richtungen, das heißt, Daten können im Vollduplexbetrieb zwischen den Prozessen ausgetauscht werden.
Jeder Prozess, der den Namen einer benannten Pipe kennt, kann über diesen Namen die Verbindung zur Pipe und damit zu anderen Prozessen herstellen.
Pipes in Betriebssystemen
Pipes sind in verschiedenen Betriebssystemen realisiert, die meisten bieten sowohl anonyme als auch benannte Pipes.
OS/2
OS/2 kennt anonyme und benannte Pipes. Benannte Pipes gehören zu den leistungsfähigsten IPC-Methoden, die OS/2 zu bieten hat. Wenn ein Server-Prozess eine benannte Pipe erzeugt, so kann er mehrere Instanzen dieser Pipe generieren, die alle unter demselben Namen angesprochen werden: Eine named pipe kann gemultiplexed werden, so dass ein einzelner Server-Prozess mehrere Clients gleichzeitig bedienen kann.
Unix
Pipes sind unter Unix eines der mächtigsten Werkzeuge, um die sequentielle Abarbeitung von Befehlen auf einem bestimmten Datenbestand zu ermöglichen.
Bei einer anonymen Pipe ist die Kommunikation dabei auf zwei Prozesse gleichen Ursprungs beschränkt. Diese (Ursprungs-)Beziehung entsteht meistens durch Forks. In der Shell wird eine anonyme Pipe zum Startzeitpunkt der Programme durch Eingabe eines „|“-Zeichens erzeugt. Die Shell ist dann der (gemeinsame) Elternprozess beider Prozesse und erledigt die Forks automatisch.
Beispiel:
cat /var/log/messages | grep sshd
Hier wird die System-Logdatei nach dem Suchbegriff „sshd“ durchsucht.
Verlangt eine Anwendung die Angabe von Dateinamen für die Ein- oder Ausgabe, so kann man oft durch die Angabe eines Minuszeichens als Dateiname erreichen, dass auf die Standardausgabe geschrieben bzw. von der Standardeingabe gelesen wird. Auf diese Weise ist dann das Schreiben in bzw. das Lesen aus einer Pipe auch mit solchen Anwendungen realisierbar.
Beispiel:
tar c /home/user/ogg/mycolouringbook | ssh -l user server "cd /var/ogg && tar xv "
Hier wird der Inhalt eines Verzeichnisses mit tar zu einem Archiv zusammengepackt, über eine SSH-Verbindung zu einem anderen Rechner verschickt und dort entpackt.
Eine Named Pipe, auch FIFO (von first-in-first-out) genannt, ist eine Pipe, die von zwei Prozessen zur Laufzeit über einen Dateinamen zum Lesen oder Schreiben geöffnet werden kann. Bei einer Named Pipe müssen die Prozesse keinen gemeinsamen Ursprung haben, die Prozesse müssen lediglich zum Zugriff auf die Pipe autorisiert sein und den Namen der Pipe kennen.
Beispiel:
mkfifo einefifo cat /var/log/messages > einefifo & grep sshd < einefifo
FIFOs überdauern die sie verwendenden Prozesse, weil sie Bestandteil des Dateisystems sind. Allerdings kann eine FIFO keinen Inhalt haben, so lange sie von keinem Prozess geöffnet ist. Das bedeutet, dass der gepufferte Inhalt verloren geht, wenn ein schreibender Prozess sein Ende der Röhre schließt, ohne dass ein lesender Prozess das andere Ende geöffnet hat.
Windows
Windows kennt anonyme und benannte Pipes. Benannte Pipes lassen sich über das Pipe-API analog zu den SMB-Freigaben als \\ServerName\pipe\PipeName ansprechen.
Weblinks
- http://www.bellevuelinux.org/pipes.html – Pipes: A Brief Introduction (mit Hinweis zur Geschichte)
- http://msdn.microsoft.com/library/en-us/ipc/base/pipes.asp - Microsoft Developer Network (MSDN) Dokumentation des Windows Pipe API
| Dieses Dokument entstammt in seiner ersten oder einer späteren Version der deutschsprachigen Wikipedia. Es ist dort zu finden unter dem Stichwort Pipe_%28Informatik%29, die Liste der bisherigen Autoren befindet sich in der Versionsliste; die Originalfassung kann dort auch bearbeitet werden. Alle Texte der Wikipedia und ihre Derivate stehen unter der GNU-Lizenz für freie Dokumentation. |
