【问题标题】:Detect disconnect from named pipe in linux在linux中检测与命名管道的断开连接
【发布时间】:2013-01-08 19:11:27
【问题描述】:

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

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

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

编辑

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

【问题讨论】:

  • 你是如何制作命名管道的,到目前为止你有什么尝试?
  • 管道是用“mkfifo”创建的。然后我等待(使用“选择”)来自另一端的数据。协议不允许我发送 ping 或类似的东西。
  • 这是有据可查的。我很难相信你做过任何研究......
  • 感谢您的回复.. 我想我问错了问题。实际的问题是:有没有办法在选择调用中检测断开连接,而无需显式调用“读取”或“写入”..
  • select 仍然会对读取的套接字集进行痒痒,您可以读取适当的设置套接字。然后检查 0 和 errno 等。

标签: c++ linux named-pipes


【解决方案1】:

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

读取和接收:

这些调用返回接收到的字节数,如果出错则返回 -1 发生了。 当对端执行了一个操作后,返回值为 0 有序关机

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多