Вот example, чтобы проиллюстрировать, что я имею в виду:Зачем мне нужно закрывать fds при чтении и записи на трубу?
#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);
}
Тем не менее, что, если один из моих процессов необходимо постоянно писать к трубе, а другой трубопровод должен прочитать?
Пример, приведенный выше, работает только для одной записи и чтения.
Я думаю, что ты нужна блокировка, тогда вы можете «заблокировать трубу», когда один процесс ее использует. Когда все процессы выполняются с помощью одного из них, он закрывает его. – Skurmedel
Они не будут работать с трубой в течение всего времени программы. – 2009-06-10 14:47:34
Хорошо. Затем завершается последний финишный процесс: либо вы открываете тонны труб, либо синхронизируете доступ к одной трубе. – Skurmedel