Uno de los mejores ejemplos de un uso práctico de una canalización con nombre...
De http://en.wikipedia.org/wiki/Netcat:
Otro comportamiento útil es usar netcat
como apoderado. Tanto los puertos como los hosts se pueden redirigir. Mira este ejemplo:
nc -l 12345 | nc www.google.com 80
El puerto 12345 representa la solicitud.
Esto inicia un nc
servidor en el puerto 12345 y todas las conexiones se redirigen a google.com:80
. Si un navegador web realiza una solicitud a nc
, la solicitud se enviará a Google pero la respuesta no se enviará al navegador web. Eso es porque las tuberías son unidireccionales. Esto se puede solucionar con una canalización con nombre para redirigir la entrada y la salida.
mkfifo backpipe
nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe
Aquí están los comandos:
$ mkfifo named_pipe
$ echo "Hi" > named_pipe &
$ cat named_pipe
El primer comando crea la tubería.
El segundo comando escribe en la tubería (bloqueo). El &
pone esto en segundo plano para que pueda continuar escribiendo comandos en el mismo shell. Saldrá cuando el FIFO se vacíe con el siguiente comando.
El último comando se lee desde la canalización.
Abre dos conchas diferentes y déjalas una al lado de la otra. En ambos, ve al /tmp/
directorio:
cd /tmp/
En el primero escribe:
mkfifo myPipe
echo "IPC_example_between_two_shells">myPipe
En el segundo, escribe:
while read line; do echo "What has been passed through the pipe is ${line}"; done<myPipe
El primer shell no le devolverá ningún aviso hasta que ejecute la segunda parte del código en el segundo shell. Es porque la lectura y escritura de fifo está bloqueando.
También puede echar un vistazo al tipo FIFO haciendo un ls -al myPipe
y ver los detalles de este tipo específico de archivo.
¡El próximo paso sería embarcar el código en un script!