我使用管道在父进程和子进程之间进行通信。
我读过的这本书说,在父进程中,我必须关闭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/

10-11 15:15