2010-11-06 18 views

risposta

64

Uno dei migliori esempi di un uso pratico di una named pipe ...

Da http://en.wikipedia.org/wiki/Netcat

Un altro comportamento utile sta usando netcat come proxy. Entrambe le porte e gli host possono essere reindirizzati. Guarda questo esempio:

nc -l 12345 | nc www.google.com 80 

Port 12345 rappresenta la richiesta di Questo avvia un server nc sulla porta 12345 e tutti i collegamenti reindirizzati google.com:80. Se un browser Web inoltra una richiesta a nc, la richiesta verrà inviata a google ma la risposta non verrà inviata al browser web. Questo perché i tubi sono unidirezionali. Questo può essere risolto 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 
+31

Un proxy implementato con shell one-liner. Nessuno mi ha detto che unix potrebbe fare * questo *. –

+3

Beh ... immagino sia in realtà un doppio rivestimento ... – hft

+3

@hft Che ne dici di 'mkfifo backpipe; nc -l 12345 0 backpipe'? – Levi

18

Ecco i comandi:

$ mkfifo named_pipe 

$ echo "Hi" > named_pipe & 

$ cat named_pipe 

Il primo comando crea il tubo.

Il secondo comando scrive al tubo (blocco). Lo & lo mette in secondo piano in modo da poter continuare a digitare comandi nella stessa shell. Uscirà quando il FIFO viene svuotato dal comando successivo.

L'ultimo comando legge dal tubo.

+7

vorrei cambiare il # per $ quindi non è tutto commentato (e non eseguito come root!) – alternative

+1

E 'solo per dimostrare che questo è rapido un guscio! – Khaled

+3

È consuetudine che "#" faccia riferimento a un prompt di root (ovvero, un prompt in una shell di root). Non c'è niente qui che richiederebbe l'esecuzione in una shell di root. – thomasrutter

21

Aprire due gusci diversi e lasciarli affiancati. In entrambi, andare in/tmp/directory

cd /tmp/ 

Nel primo tipo:

mkfifo myPipe 
echo "IPC_example_between_two_shells">myPipe 

Nella seconda, tipo:

while read line; do echo "What has been passed through the pipe is ${line}"; done<myPipe 

primo guscio non daranno qualsiasi richiamo fino a quando non si esegue la seconda parte del codice nella seconda shell. È perché il fifo legge e scrive 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.

passo successivo sarebbe quello di intraprendere il codice in uno script! - Spero che sia d'aiuto.

+0

È possibile effettuare scritture non bloccanti sulla fifo? – dabicho

Problemi correlati