0

我在 Linux 中从事 C++ 项目,其中两个程序通过命名管道进行通信。

现在我想在一个程序中检测另一个程序是否与命名管道断开连接。

有没有办法检测断开连接?

编辑

我在 O_RDWR 模式下打开了 fifo - 这就是 select 对断开连接没有反应的原因。现在我用 (O_RDONLY | O_NDELAY) 打开 fifo,一切正常。

4

2 回答 2

1

如果read一端返回 0 字节,则管道断开。

于 2013-01-08T19:40:56.037 回答
1

这与 TCP/IP 中的相同。您需要尝试读取数据,如果读取失败并返回 0,则管道已关闭。

阅读和接收:

这些调用返回接收到的字节数,如果发生错误,则返回 -1。 当对等方执行了有序关闭时,返回值将为 0

也有SIGPIPE信号。当您尝试写入损坏的管道 - 没有阅读器的管道时,它将被发送。

于 2013-01-08T20:16:10.067 回答