popen&管道的状态

时间:2009-11-16 20:50:34

标签: linux popen

假设我通过popen(只读)从流程PA生成流程PO。然后我在PA旁边pclose()管道。

在PO方面,如何在不执行write()的情况下确定 stdout 是否仍然可用?

请注意,我尝试在PO方面捕捉SIGPIPE无济于事。

更新:我尝试使用fstat(1, &buf)但没有成功。

更新:我需要通过PO检测此情况的原因我无法从PA访问PO的PID(因此无法将其删除)。此外,我希望PO在PA的面部故障中更加强大,即单独退出。

解决方案:我继续使用socketpairfork。试图通过popen控制一个过程变成了一场噩梦(至少对我来说)。 非常感谢所有贡献者!

2 个答案:

答案 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中发布有关您需要执行此操作的更多详细信息?