我如何在Linux和Unix上等待EPIPE?

时间:2011-10-08 09:42:33

标签: linux select epipe

我正在用C语言在Linux上编写程序,我想等待(使用 select poll )管道文件描述符被破坏,例如我想等到后续的write(2)将返回EPIPE(或者将发送SIGPIPE)。将文件描述符添加到 writefds select exceptfds 参数不能解决问题。我知道我可以通过创建多个进程或线程来解决这个问题,但在这个问题中,我只对单进程,单线程解决方案感兴趣,最好包括 select poll (因为我也想等待其他文件描述符事件)。我无法假设谁在管道的另一端 - 如果这些流程在流程树中很远,那么解决方案必须有效。

我更喜欢可以在许多Unix系统(不仅仅是Linux)上移植的解决方案。

1 个答案:

答案 0 :(得分:0)

在管道的写端上使用 POLLHUP 调用poll(2)似乎已经在Linux上完成了技巧。