我正在用 C 语言在 Linux 上编写一个程序,我想等待(使用select或poll)管道文件描述符被破坏,例如我想等到随后的 write(2 ) 将返回 EPIPE(或将发送 SIGPIPE)。将文件描述符添加到writefds或select的exceptfds参数并不能解决问题。我知道我可以通过创建多个进程或线程来解决这个问题,但是在这个问题中,我只对单进程、单线程的解决方案感兴趣,最好涉及select和poll(因为我也想等待其他文件描述符事件)。我不能对谁在管道的另一端做出任何假设——如果这些进程在进程树中很远,那么解决方案必须有效。
我更喜欢在许多 Unix 系统(不仅仅是 Linux)上可移植的解决方案。