假设您创建一个pipe然后fork。在父级中,您可以将close作为写入端,将fdopen作为读取端,以获得FILE*。在子项中,您可以closestdoutdup2管道的写入端到stdoutclose管道的两端,以及exec。在什么条件下,例如, D的孩子在父母中做了什么或其他调用,当孩子在消费exec之后退出或将调用如eof悬念时,父代会看到FILE*“cc>”吗?

最佳答案

标准I/O库在引擎盖下使用read(2)write(2)read(2)的行为是在管道中没有更多可用数据且没有活动写入程序时返回0以指示EOF(标准I/O库随后将其转换为我们都知道的负EOF常量)。
所以,如果设置正确,getline()将不会挂起,它将返回-1。
如果看到getline()挂起,即使子管道已终止并关闭管道,也可能会将管道写入通道留在其他地方打开。在调用getline()之前,请再次检查以确保父级已关闭写通道。

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

10-14 02:17