假设我通过popen
(只读)从流程PA生成流程PO。然后我在PA旁边pclose()
管道。
在PO方面,如何在不执行write()
的情况下确定 stdout 是否仍然可用?
请注意,我尝试在PO方面捕捉SIGPIPE无济于事。
更新:我尝试使用fstat(1, &buf)
但没有成功。
更新:我需要通过PO检测此情况的原因我无法从PA访问PO的PID(因此无法将其删除)。此外,我希望PO在PA的面部故障中更加强大,即单独退出。
解决方案:我继续使用socketpair
,fork
。试图通过popen
控制一个过程变成了一场噩梦(至少对我来说)。 非常感谢所有贡献者!
答案 0 :(得分:2)
嗯... pclose()应该等待PO在关闭管道之前完成。与此同时,PO可以保持写入管道末端至少4192字节( ulimit -p 乘以512),然后它应该只是阻塞。
如果你想要更多控制,也许你必须切换pipe()/ fork()/ dup2()/ close()。如果这是你想要的,请告诉我,我会发布一些代码。
答案 1 :(得分:2)
PA是信息的消费者(因此它确实是popen()和pclose())。
PO是提供者,因此服务器 - 在这种情况下它只知道它正在写入stdout,但无法告诉stdout绑定到什么。因此,在这种情况下,PO 不应该过多了解stdout 。
EOF检测应在PA程序中进行。
您是否可以在PO中发布有关您需要执行此操作的更多详细信息?