C 中的关闭管道文件描述符

2023-12-23

这是代码:

int main() {

    int fd[2];
    pipe(fd);
    int r = fork();
    if (r > 0) { //parent
        close(fd[0]);
        // do a bunch of things
    } else { //child
        close(fd[1]);
        // do a bunch of things
    return 0;
}

这是一段代码,其中父级写入管道,子级从管道读取。我的问题是:对于两个结束语句,它们到底要结束什么?父级和子级应该共享相同的文件,即 fd[0] 和 fd[1]。如果 fd[0] 在父级中关闭,那么它是否也应该在子级中关闭?


From http://linux.die.net/man/2/pipe http://linux.die.net/man/2/pipe pipe()创建一个由两个文件描述符组成的管道,这两个文件描述符对应于管道的两个“端”,即读取端和写入端。它实际上与文件不同。内核从写端读取数据,为您缓冲,然后将其传输到读端。

这应该很明显为什么pipe()创建两个文件描述符。 writer将其需要的所有数据写入write fd并关闭fd。这也引发了EOF将被寄出。读取器通常会继续读取数据,直到遇到EOF并结束它的结束。在这种情况下,有一段时间写 fd 被关闭,但数据仍然缓冲在管道中,等待读取器读出。拥有单个 fd 是没有意义的,因为您需要在编写器和读取器进程之间进行另一层协调,否则谁将在何时进行关闭?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中的关闭管道文件描述符 的相关文章

随机推荐