我在Linux上从事一个C ++项目,其中两个程序通过命名管道进行通信。
现在我想在一个程序中检测另一个程序是否与命名管道断开连接。
有没有办法检测断开连接?
修改
我在O_RDWR模式下打开了fifo - 这就是select没有对断开连接做出反应的原因。现在我用(O_RDONLY | O_NDELAY)打开fifo,一切正常。
答案 0 :(得分:1)
如果一端的read
返回0字节,则管道断开连接。
答案 1 :(得分:1)
这与TCP / IP相同。您需要尝试读取数据,如果失败为0,则管道已关闭。
阅读和回忆:
这些调用返回接收的字节数,如果发生错误则返回-1 发生了。 对等体执行后,返回值为0 有序关闭。
还有SIGPIPE
信号。当你尝试写一个没有读者的破管道时会发送它。