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