Uno dei migliori esempi di utilizzo pratico di una named pipe...
Da http://en.wikipedia.org/wiki/Netcat:
Un altro comportamento utile è usare
netcat
come procuratore. Sia le porte che gli host possono essere reindirizzati. Guarda questo esempio:nc -l 12345 | nc www.google.com 80
La porta 12345 rappresenta la richiesta.
Questo avvia un
nc
server sulla porta 12345 e tutte le connessioni vengono reindirizzate agoogle.com:80
. Se un browser Web effettua una richiesta anc
, la richiesta verrà inviata a google ma la risposta non verrà inviata al browser web. Questo perché i tubi sono unidirezionali. Questo può essere aggirato con una named pipe per reindirizzare l'input e l'output.mkfifo backpipe nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe
Ecco i comandi:
$ mkfifo named_pipe
$ echo "Hi" > named_pipe &
$ cat named_pipe
Il primo comando crea la pipe.
Il secondo comando scrive nella pipe (blocco). Il &
lo mette in secondo piano in modo da poter continuare a digitare i comandi nella stessa shell. Uscirà quando il FIFO sarà svuotato dal comando successivo.
L'ultimo comando legge dalla pipe.
Apri due gusci diversi e lasciali uno accanto all'altro. In entrambi, vai al /tmp/
cartella:
cd /tmp/
Nella prima digita:
mkfifo myPipe
echo "IPC_example_between_two_shells">myPipe
Nella seconda digita:
while read line; do echo "What has been passed through the pipe is ${line}"; done<myPipe
La prima shell non ti restituirà alcun prompt fino a quando non eseguirai la seconda parte del codice nella seconda shell. È perché il fifo in lettura e scrittura sta bloccando.
Puoi anche dare un'occhiata al tipo FIFO facendo un ls -al myPipe
e vedere i dettagli di questo specifico tipo di file.
Il passo successivo sarebbe imbarcare il codice in uno script!