c++ - 在 Linux 中检测与命名管道的断开连接

标签 c++ linux named-pipes

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

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

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

编辑

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

最佳答案

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

阅读和接收:

These calls return the number of bytes received, or -1 if an error occurred. The return value will be 0 when the peer has performed an orderly shutdown.

还有 SIGPIPE 信号。当您尝试写入损坏的管道 - 没有读者的管道时,它会被发送。

关于c++ - 在 Linux 中检测与命名管道的断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14222314/

相关文章:

c# - 远程关闭后保持管道打开的最佳方法

c++ - 如何将分隔的 txt 文件传递​​给采用常量 char * 的函数?

c++ - 程序终止之前是否需要释放内存资源?

c++ - 虚拟基类子对象的多个实例(真的)——不可能吗?

linux - 需要通过 SFTP 将文件从一台 Linux 机器传输到另一台 Linux 机器

c# - 命名管道包装库工作示例

c++ - 具有不同输入的循环

mysql - UTF8 在翻译中丢失,HTML 格式从/到 mysql

linux - 使用命令行呈现 html 页面并保存它

winapi - 无缓冲 CreateNamedPipe 用作 CreateProcess 的标准输出