Casi todo en Linux puede considerarse un archivo , pero la principal diferencia entre un archivo normal y una canalización con nombre es que una canalización con nombre es una instancia especial de un archivo que no tiene contenido en el sistema de archivos.
Aquí hay una cita de man fifo
:
Un archivo especial FIFO (una tubería con nombre) es similar a una tubería, excepto que se accede como parte del sistema de archivos. Puede abrirse mediante múltiples procesos para leer o escribir. Cuando los procesos intercambian datos a través de FIFO, el núcleo pasa todos los datos internamente sin escribirlos en el sistema de archivos. Por lo tanto, el archivo especial FIFO no tiene contenido en el sistema de archivos; la entrada del sistema de archivos simplemente sirve como punto de referencia para que los procesos puedan acceder a la tubería utilizando un nombre en el sistema de archivos.
El núcleo mantiene exactamente un objeto de tubería para cada archivo especial FIFO que se abre al menos por un proceso. El FIFO debe abrirse en ambos extremos (lectura y escritura) antes de que se puedan pasar los datos. Normalmente, abrir los bloques FIFO hasta que el otro extremo también se abra.
Entonces, en realidad, una tubería con nombre no hace nada hasta que algún proceso lo lee y escribe. No ocupa espacio en el disco duro (excepto un poco de metainformación), no utiliza la CPU.
Puede verificarlo haciendo esto:
Crear una tubería con nombre
$ mkfifo /tmp/testpipe
Vaya a algún directorio, por ejemplo /home/user/Documents
, y gzip todo lo que contiene, usando una tubería con nombre.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
Aquí debería ver el PID del proceso gzip. En nuestro ejemplo fue 28584.
Ahora verifique qué está haciendo este PID
$ 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
Verá que no está utilizando recursos . 0% de uso de CPU, 0% de uso de memoria.
Verifique el presentimiento sobre el uso del espacio de archivos
$ du -h /tmp/testpipe
0 testpipe
Y de nuevo 0
, nada. El tubo de ensayo podría usarse nuevamente si fuera necesario.
No te olvides de matar a gzip, usando kill -15 28584
. Y quite nuestra tubería con nombre usandorm /tmp/testpipe
Usos de ejemplo
Puede redirigir casi todo utilizando una canalización con nombre. Como ejemplo, puede ver este proxy de una línea .
También aquí hay una buena explicación más del uso de tuberías con nombre. Puede configurar dos procesos en un servidor para comunicarse utilizando una tubería con nombre en lugar de la pila TCP / IP. Es mucho más rápido y no carga recursos de red. Por ejemplo, su servidor web puede comunicarse con la base de datos directamente usando una tubería con nombre, en lugar de usar la localhost
dirección o escuchar algún puerto.