Fast alles in Linux kann als Datei betrachtet werden. Der Hauptunterschied zwischen einer regulären Datei und einer Named Pipe besteht darin, dass eine Named Pipe eine spezielle Instanz einer Datei ist, die keinen Inhalt im Dateisystem hat.
Hier ist ein Zitat aus man fifo
:
Eine FIFO-Spezialdatei (eine Named Pipe) ähnelt einer Pipe mit dem Unterschied, dass auf sie als Teil des Dateisystems zugegriffen wird. Es kann durch mehrere Prozesse zum Lesen oder Schreiben geöffnet werden. Wenn Prozesse Daten über das FIFO austauschen, leitet der Kernel alle Daten intern weiter, ohne sie in das Dateisystem zu schreiben. Somit hat die FIFO-Spezialdatei keinen Inhalt im Dateisystem; Der Dateisystemeintrag dient lediglich als Referenzpunkt, sodass Prozesse über einen Namen im Dateisystem auf die Pipe zugreifen können.
Der Kernel verwaltet genau ein Pipe-Objekt für jede FIFO-Spezialdatei, die von mindestens einem Prozess geöffnet wird. Der FIFO muss an beiden Enden geöffnet sein (Lesen und Schreiben), bevor Daten übertragen werden können. Normalerweise werden die FIFO-Blöcke geöffnet, bis auch das andere Ende geöffnet ist.
Tatsächlich tut eine Named Pipe also nichts, bis ein Prozess darauf liest und schreibt. Es nimmt keinen Platz auf der Festplatte ein (außer ein bisschen Metainformationen), es verwendet nicht die CPU.
Sie können dies folgendermaßen überprüfen:
Erstellen Sie eine Named Pipe
$ mkfifo /tmp/testpipe
Gehen Sie zum Beispiel in ein Verzeichnis /home/user/Documents
und gzipen Sie alles darin mit der Named Pipe.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
Hier sollte die PID des gzip-Prozesses angezeigt werden. In unserem Beispiel war es 28584.
Überprüfen Sie nun, was diese PID tut
$ ps u -P 28584
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
c0rp 28584 0.0 0.0 29276 7800 pts/8 S 00:08 0:00 bash
Sie werden sehen, dass keine Ressourcen verwendet werden . 0% CPU-Auslastung, 0% Speicherauslastung.
Überprüfen Sie die Größe des Dateibereichs
$ du -h /tmp/testpipe
0 testpipe
Und wieder 0
nichts. Die Testpipe kann bei Bedarf wieder verwendet werden.
Vergiss nicht, gzip mit zu töten kill -15 28584
. Und entfernen Sie unsere Named Pipe mitrm /tmp/testpipe
Beispielanwendungen
Sie können fast alles mit Named Pipe umleiten. Als Beispiel sehen Sie diesen einzeiligen Proxy .
Auch hier gibt es noch eine nette Erklärung für die Verwendung von Named Pipes. Sie können zwei Prozesse auf einem Server so konfigurieren, dass die Kommunikation über eine Named Pipe anstelle des TCP / IP-Stacks erfolgt. Es ist viel schneller und lädt keine Netzwerkressourcen. Beispielsweise kann Ihr Webserver direkt über eine Named Pipe mit der Datenbank kommunizieren, anstatt die localhost
Adresse zu verwenden oder einen Port abzuhören.