Está en la página 1de 4

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.

También podría gustarte