Aquí es un example para ilustrar lo que quiero decir:¿Por qué necesito cerrar fds cuando leo y escribo en la tubería?
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int fd[2], nbytes;
pid_t childpid;
char string[] = "Hello, world!\n";
char readbuffer[80];
pipe(fd);
if((childpid = fork()) == -1)
{
perror("fork");
exit(1);
}
if(childpid == 0)
{
/* Child process closes up input side of pipe */
close(fd[0]);
/* Send "string" through the output side of pipe */
write(fd[1], string, (strlen(string)+1));
exit(0);
}
else
{
/* Parent process closes up output side of pipe */
close(fd[1]);
/* Read in a string from the pipe */
nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
printf("Received string: %s", readbuffer);
}
return(0);
}
Sin embargo, ¿qué pasaría si uno de mis procesos tiene que escribir de forma continua a la tubería mientras que la otra tubería tiene que leer?
El ejemplo anterior parece funcionar solo para una escritura y una lectura.
supongo que lo que La necesidad es un bloqueo. Luego, puede "bloquear el tubo" cuando un proceso lo utiliza. Cuando todos los procesos se realizan con el tubo uno de ellos lo cierra. – Skurmedel
No se realizarán con tubería durante la duración del programa. –
Ok. Luego, el último proceso de finalización lo cierra :) O abre toneladas de tuberías o sincroniza el acceso a una tubería. – Skurmedel