Categorías: Tutoriales

Comunicacion entre Procesos con Named Pipes

 
Las “Named Pipes” o “Tuberias Nombradas” son el nombre de una tecnica para lograr realizar una comunicacion entre procesos, a esto se le conoce como IPC (Inter Process Communication).  Permite a dos procesos en una misma maquina o de diferentes maquinas conectadas compartir mensajes entre procesos para comunicarse, esto es necesario en ocasiones en sistemas multitarea o multiproceso.

Las principales caracteristicas de una tuberia nombrada son:

  • Existen en el sistema como un archivo especial.
  • Los procesos de diferentes padres pueden compartir datos.
  • Cuando se realizan todas las operaciones permanece en el sistema (a menos que se especifique lo contrario)
  • Deben tener un lector y un escritor

Vamos a realizar un ejemplo en el que crearemos 2 sencillos programas en C en el que crearemos una tuberia, uno escribira en ella y otro leera de ella. Se compartira un mensaje de texto que sera mostrado en pantalla a traves de la terminal.

  • Clase Escritora

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main(){
 int t;
 char *tuberia = "/tmp/tuberia";

 /*crea un nuevo archivo fifo especial,
 incluye una ruta y un parametro con una
 mascara de permisos.
 */ mkfifo(tuberia,0666);

 /*
 abrimos una nueva tuberia
 O_RDONLY - Abrir para solo lectura
 O_WRONLY - Abrir para solo escritura
 O_RDWR - Abrir para lectura / escritura
 O_APPEND - Agrega al final del Archivo
 ...
 */ t = open(tuberia,O_WRONLY);
 //escribimos el mensaje que compartiremos
 write(t,"Mensaje entre Procesos",sizeof("Mensaje entre Procesos"));
 //cerramos la tuberia
 close(t);

 //borramos
 unlink(tuberia);

 return 0;
}

Compilamos:
sudo gcc -o writer writer.c

  • Clase Lectora

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>

#define MAX_BUF 1024

int main(){
 int t;
 char *tuberia = "/tmp/tuberia";
 char msj[MAX_BUF];

 //abre la tuberia
 t = open(tuberia,O_RDONLY);
 //lee el mensaje desde la tuberia y lo almacena
 read(t,msj,MAX_BUF);
 //imprime el valor que comparte el otro proceso
 printf("Recibido: %sn",msj);
 //cerramos el tubo
 close(t);

 return 0;
}

Compilamos:
sudo gcc -o reader reader.c

Abrimos 2 terminales y ejectamos el writer en una y el reader en otra.

sudo ./writer
sudo ./reader

y vemos el resultado, al ejecutar writer y despues reader en terminales distintas, aparece el mensaje que colocamos en writer en la terminal donde se ejecuta el programa reader.

Jonathan Melgoza

Soy Jonathan Melgoza, Ingeniero en Sistemas Computacionales, Programador y Blogger, autor de un blog de Tecnologia y Programacion.

Ver comentarios

  • Siempre he usado comunicación de procesos usando sockects del sistema, ¿qué diferencia tiene este método en cuanto a ventajas o inconvenientes?

    ¿Para qué recomendarías unos y otros?

  • Es cierto las named pipes y los unix sockets tienen un funcionamiento muy similar, ambos comunican procesos en la misma maquina, ambos leen y escriben..

    Named Pipes (FIFO) Unix Sockets
    - Facil implementacion - Un poco mas complicado de implementar
    - Unidireccionales(bidireccional

    si se crean dos pipes) - Bidireccionales
    - Solo comunica dos procesos - Comunica mas de 2 procesos (servidor procesa
    multiples clientes)
    - Solo envian por stream - Pueden enviar stream de bytes o por datagramas

    Para que te recomiendo uno u otro?
    Pues eso depende mucho de que es lo que vas a realizar y tus necesidades, aunque en la mayoria de los casos te diria que es conveniente utilizar unix sockets, aunque tambien recordar que existen varias tecnicas para comunicar procesos, por ejemplo si lo que quieres es velocidad te recomiendo el metodo de memoria compartida.(luego hago algo de unix sockets o shared memory)

    • También conocía ese método :), shmat() y compañía, sorprendente lo que uno aprende gracias a autores como tú.

      Suponía que este método podía existir, de hecho, podrías hasta crear un método "a mano" pero tal como lo explica con esa metodología es mucho mejor.

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace