Ecco un example per illustrare quello che voglio dire:Perché devo chiudere FDS durante la lettura e la scrittura sulla pipe?
#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);
}
Tuttavia, cosa succede se uno dei miei processi ha bisogno di scrivere in modo continuo al tubo, mentre l'altro tubo ha bisogno di leggere?
L'esempio precedente sembra funzionare solo per una scrittura e una lettura.
Credo che quello che si è necessario un lock, quindi è possibile "bloccare il pipe" quando un processo lo utilizza. Quando tutti i processi vengono eseguiti con il pipe uno di thme lo chiude. – Skurmedel
Non saranno fatti con pipe per tutta la durata del programma. –
Ok. Quindi l'ultimo processo di finitura lo chiude :) O si aprono tonnellate di pipe o si sincronizza l'accesso a una pipe. – Skurmedel