Pipes y FIFO

Introduccion:

Una pipe es una tuberia en memoria que se utiliza para la comunicacion entre procesos (IPC).
Existen dos tipos:

  • pipe anonima
  • pipe con nombre o FIFO

 

Pipe anonima:

Si ejecuto:

ls -la /usr/bin

seguramente voy a tener un listado muy largo.
En ese caso conviene ejecutarlo asi:

ls -la /usr/bin | less  ("less" sirve para leer texto de stdin y lo muestra de una forma mas amigable para el usuario)

Aqui tenemos dos programas ejecutandose al mismo tiempo gracias al simbolo " | ".
Entre ellos se ha generado una pipe anonima que sirve para intercambiar, en este caso, texto que envia "ls" por stdout hacia la stdin de "less".

 

Pipe con nombre o FIFO:

Los FIFOs son pipes que se comportan en forma similar a un archivo pero con muchas limitaciones.
FIFO significa "lo primero que entra es lo primero que sale".

Para crear uno se usa la utilidad mkfifo
En este ejemplo voy a crear dos fifos: "nombres.txt" y "prueba.txt"

Como se puede ver ambos fifos figuran en el directorio como si fueran simples archivos.
Pero en sus atributos tienen la leta "p" adelante.
Para entender como funciona voy a dar este ejemplo:

Ya tenemos un FIFO llamado "prueba.txt".
Ejecuto: echo HOLA > prueba.txt para enviar el texto "HOLA" adentro del FIFO.
El sistema operativo bloquea la operacion de escritura que esta haciendo "echo" hacia el FIFO y se queda esperando hasta alguien reclame los datos.
Para esa tarea ejecutamos en otra terminal: cat prueba.txt y vamos a obtener el texto en la pipe, liberando ademas el otro proceso bloqueado.

 

Comentarios