Eines der besten Beispiele für den praktischen Einsatz einer Named Pipe...
Von http://en.wikipedia.org/wiki/Netcat:
Ein weiteres nützliches Verhalten ist die Verwendung von netcat
als Stellvertreter. Sowohl Ports als auch Hosts können umgeleitet werden. Sehen Sie sich dieses Beispiel an:
nc -l 12345 | nc www.google.com 80
Port 12345 stellt die Anfrage dar.
Dies startet eine nc
Server auf Port 12345 und alle Verbindungen werden auf google.com:80
umgeleitet . Wenn ein Webbrowser eine Anfrage an nc
stellt , wird die Anfrage an Google gesendet, aber die Antwort wird nicht an den Webbrowser gesendet. Das liegt daran, dass Rohre unidirektional sind. Dies kann mit einer benannten Pipe umgangen werden, um die Ein- und Ausgabe umzuleiten.
mkfifo backpipe
nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe
Hier sind die Befehle:
$ mkfifo named_pipe
$ echo "Hi" > named_pipe &
$ cat named_pipe
Der erste Befehl erstellt die Pipe.
Der zweite Befehl schreibt in die Pipe (blocking). Die &
setzt dies in den Hintergrund, sodass Sie weiterhin Befehle in derselben Shell eingeben können. Es wird beendet, wenn der FIFO durch den nächsten Befehl geleert wird.
Der letzte Befehl liest aus der Pipe.
Öffnen Sie zwei verschiedene Schalen und lassen Sie sie nebeneinander. Gehen Sie in beiden zu /tmp/
Verzeichnis:
cd /tmp/
Geben Sie im ersten ein:
mkfifo myPipe
echo "IPC_example_between_two_shells">myPipe
Geben Sie im zweiten ein:
while read line; do echo "What has been passed through the pipe is ${line}"; done<myPipe
Die erste Shell gibt Ihnen keine Eingabeaufforderung zurück, bis Sie den zweiten Teil des Codes in der zweiten Shell ausführen. Das liegt daran, dass das Fifo-Lesen und -Schreiben blockiert.
Sie können sich auch den FIFO-Typ ansehen, indem Sie ls -al myPipe
ausführen und sehen Sie sich die Details dieses speziellen Dateityps an.
Der nächste Schritt wäre, den Code in ein Skript einzufügen!