假设您创建一个pipe
然后fork
。在父级中,您可以将close
作为写入端,将fdopen
作为读取端,以获得FILE*
。在子项中,您可以close
stdout
,dup2
管道的写入端到stdout
,close
管道的两端,以及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/