gpt4 book ai didi

linux - 如何与 parent 沟通 child 关闭了管道的写入端?

转载 作者:太空宇宙 更新时间:2023-11-04 09:20:53 63 4
gpt4 key购买 nike

当管道的写入端关闭时,

read 管道返回 0:

#include <unistd.h>

int main() {
int pipefd[2];
char c;

pipe(pipefd);
close(pipefd[1]);
read(pipefd[0], &c, 1);
}

在上面的代码中,read 返回。但是如果我们 fork 一个 child ,这就不起作用了:

#include <unistd.h>

int main() {
int pipefd[2];
char c;

pipe(pipefd);

if (fork())
read(pipefd[0], &c, 1);
else
close(pipefd[1]);
}

此处,close 成功,但 read 挂起。传达 child 已关闭的最佳方式是什么,所以 parent 的 read 将返回(0)?

最佳答案

parent 和 child 都有管道的读写端。因为还有一个open write end,读不能返回EOF。

修复方法是,如果您不打算写入管道,则关闭管道的写入端;如果您不打算从管道读取,则关闭管道的读取端,例如

if (fork()) {
close(pipefd[1]);
read(pipefd[0], &c, 1); /* == 0 */
} else {
close(pipefd[0]);
close(pipefd[1]);
}

关于linux - 如何与 parent 沟通 child 关闭了管道的写入端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42034564/

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