我使用管道在父进程和子进程之间进行通信。
我读过的这本书说,在父进程中,我必须关闭pipefd[1],但我没有这样做,也没有其他事情发生,所以我的问题是“如果我不关闭pipefd[1],是否有不受控制的事情?”
谨致问候!
int pipefd[2];
if(pipe(pipefd) == -1)
{
perror("pipe communication error");
exit(EXIT_FAILURE);
}
int fd = fork();
if(fd < 0)
{
perror("fork child process error");
exit(EXIT_FAILURE);
}
if(fd != 0)//run in parent proc
{
int a = -1;
int i = 1;
//close(pipefd[1]); ## here! ##
while(i)
{
read(pipefd[0], &a, sizeof(a));
printf("%d\n", a);
sleep(4);
}
}
else//run in child proc
{
int i = 1;
//close(pipefd[0]); ## here! ##
while(i)
{
write(pipefd[1], &i, sizeof(i));
i++;
sleep(1);
}
}
最佳答案
如果读卡器没有关闭管道的写端,则在编写器进程关闭它时,它将不会接收到文件结尾(因为仍有一个文件描述符为写端打开)。
关于c - 我没有关闭管道末端之一,是否发生了任何错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10120473/