Dudas con Pipes

Iniciado por javivi6969, 23 Diciembre 2012, 11:22 AM

0 Miembros y 1 Visitante están viendo este tema.

javivi6969

Hola, tengo grandes dudas con la comunicacion por pipes, los dup, etc...en definitiva que no tengo muy claro cuando se ejecuta el padre o cuando el hijo, etc...

En la uni nos han puesto este codigo y la verdad es que me despista bastante, sobre todo los cierres de los canales, que no logro cogerlo claramente:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
int n, seguir;
void rut1() {printf("Señal 1\n"); seguir=0;
signal (SIGUSR1, rut1);}
void rut2() {printf("Señal 2\n"); seguir=1; n++;
signal (SIGUSR2, rut2);}
void main()
{
int p1[2],i;
seguir = 1;
n = 0;
pipe(p1);
signal (SIGUSR1, rut1);
signal (SIGUSR2, rut2);
switch(fork()) {
case 0: close(1);
dup(p1[1]);
close(p1[0]); close (p1[1]);
while(seguir);
pause();
write(1, &n, sizeof(int));
break;
default: close(0);
dup(p1[0]);
close(p1[0]); close (p1[1]);
read(0, &i, sizeof(int));
printf("He recibido un %d", i);
while(seguir);
}
printf("El valor de n es %d", n);
}

Toda ayuda sera bien recibida  ;)

Muchas gracias.

Fran