【问题标题】:check if pipe opened before writing在写入之前检查管道是否打开
【发布时间】:2016-05-24 14:34:09
【问题描述】:

我想知道是否有一种方法可以在写入之前检查管道是否已打开?我不希望管道的另一端在打开时从中读取,我只想检查管道是否要发送 SIGPIPE 信号以及是否关闭我的程序。已经 read(...) 的程序不应该做出反应。

编辑:答案很简单。我只需要写一个 0 字节长的味精就够了...

【问题讨论】:

  • 不清楚...您的问题到底是什么。我觉得有一些矛盾:管道“在写入之前打开”但另一端有“如果它打开则读取”?
  • 我有 4 个守护进程通过管道消息发送到主进程的信号和主进程从中读取。现在让我们说主进程随机关闭管道(它的管道不是 fifo)。我希望我的守护进程向管道发送一个“检查消息”(让我们说每 5 秒一次)以检查它是否仍然打开,如果不是 sigpipe 应该杀死守护进程。主进程不应该看到检查消息
  • 我从未尝试过,但 Opengroup write 文档说,如果您在描述符上使用带有 ioctlI_SWROPT 标志,则可以发送零大小的消息,因此什么也不会收到,但是写入会检测到您的状况。
  • 会尝试,如果有效,我会提供
  • 嘿,对不起,我是 linux 编程的新手,我使用 ioctl 而不是 write,或者是为 write 设置了一些东西?

标签: c linux pipe


【解决方案1】:

这是命名管道吗?

您可以使用它们做的一件事是打开命名管道以在您的作家和阅读器中阅读(当然也包括写作)。当你运行你的 writer 时,这会将管道标记为在两端打开,当然你的 writer 不会真正从中读取。

this manpage on fifos。看起来多个进程可以打开管道进行读取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2014-12-09
    • 2012-07-02
    • 2015-06-17
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多