Linux/Unix Shell Scripting - pipes

 
Vista:

pipes

Publicado por nuevo83 (1 intervención) el 07/09/2007 00:57:56
Hola,

tengo una duda sobre el uso del mecanismo Ipc PIPES, en concreto mi problema es que me estoy basando en unos apuntes que dicen: "Para que un proceso del pipe detecte el fin de fichero (EOF) todos los flujos de escritura(los dos, el del padre y el del hijo) en el pipe han de estar cerrados", y he consultado alguna pagina y dice que si que tienen que esetar cerrados los descriptores de escritura.

Pero lo he probado y con cerrar el flujo de escritura del padre me es suficiente.
Por ejemplo tengo este programa:

#include <unistd.h>
void main(void)
{
int fds[2];
pipe(fds);

if (fork() == 0) {
dup2(fds[0], 0);
close(fds[1]);
execlp("sort", "sort", 0);
}
else if ( fork() == 0) {
dup2(fds[1], 1);
close(fds[0]);
execlp("who", "who", 0);
}

else {
close(fds[0]);
close(fds[1]);
wait(0);
wait(0);
}
}

En este caso solo se me queda bloqueado si no hago close(fds[1]), porque vale no le llega el EOF al proceso que esta leyendo, pero si cierro el fds[1] en el padre y en el primer hijo no hago close(fds[1]) da lo mismo, el programa se ejecuta correctamente y supuestamente si no cierro el fds[1] del primer hijo el segundo hijo ya no deberia detectar el fin de fichero.

¿Alguien me puede explicar esto?

Muchas gracias,
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder