gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:48:26 25 4
gpt4 key购买 nike

这是代码:

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;
}

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

最佳答案

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

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

关于在 C 中关闭管道文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22032120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com