开发者

How do I wait for an EPIPE on Linux and Unix?

开发者 https://www.devze.com 2023-04-11 09:35 出处:网络
I\'m writing a program on Linux in C, and I\'d like to wait (using select or poll) for a pipe file descriptor to become broken, e.g. I\'d like to wait up to the point when a subsequent write(2) would

I'm writing a program on Linux in C, and I'd like to wait (using select or poll) for a pipe file descriptor to become broken, e.g. I'd like to wait up to the point when a subsequent write(2) would return EPIPE (or SIGPIPE would be sent). Adding the file descriptor to the writefds or the exceptfds argument of select doesn't solve the problem. I know that I can solve this by creating multiple processes or threads, but in this question I'm only interested in 开发者_如何学Csingle-process, single-thread solutions, preferably involving select and poll (because I want to wait on other file descriptor events as well). I cannot make any assumption about who are on the other end of the pipe -- the solution must work if those processes are far away in the process tree.

I'd prefer a solution which is portable across many Unix systems (not just Linux).


Calling poll(2) with POLLHUP on the write-end of the pipe seems to have done trick on Linux.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号