gpt4 book ai didi

c - parent 是否在 child 退出时看到管道eof?

转载 作者:太空宇宙 更新时间:2023-11-04 02:41:38 25 4
gpt4 key购买 nike

假设您创建了一个pipe,然后是fork。在父级中,您关闭 写入端并fdopen 读取端以获得FILE*。在 child 中,你close stdout, dup2 管道的写端到stdout, close 管道的两端,和exec。在什么情况下,例如 execd 子进程做什么或在父进程中进行的其他调用,父进程会在 FILE* 上看到 eof子进程在使用 stdout 后退出,或者像 getline 这样的调用会挂起吗?

最佳答案

标准 I/O 库在底层使用了 read(2)write(2)read(2) 的行为是当管道中没有更多可用数据并且没有事件的写入器时返回 0 以指示 EOF(然后标准 I/O 库将其转换为负 EOF 常量我们都知道)。

因此,如果您正确设置,getline() 将不会挂起并返回 -1。

如果您看到 getline() 在子进程终止并关闭管道时仍然挂起,您可能在其他地方打开了管道写入 channel 。仔细检查以确保在调用 getline() 之前父级已关闭写入 channel 。

关于c - parent 是否在 child 退出时看到管道eof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31280463/

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