【问题标题】:Linux: timeout when opening named pipe for writingLinux:打开命名管道进行写入时超时
【发布时间】:2012-03-07 23:30:51
【问题描述】:

我有一个进程通过命名管道写入另一个进程。阅读器进程可能会行为不端并且不打开管道进行阅读。如果发生这种情况,我表现良好的编写器进程将挂起它的 open() 调用。 我希望写入器在打开管道时能够超时,以便在读取器没有及时打开它的末端时它可以清理并继续运行。非阻塞 open() 立即返回错误。

【问题讨论】:

    标签: linux timeout named-pipes


    【解决方案1】:

    如果是一个选项,请在这样的场景中使用 unix 域套接字。由于 FIFO 的语义,这是一种笨拙的方法,而且无论如何您都可能会遇到问题。如果有必要,这种设计不会扩展到一个客户之外。您也许可以在短期内对 FIFO 强制执行您的意愿,但我怀疑您会后悔的。

    套接字更适合这种情况。您的侦听套接字非常适合您现有的 poll(),客户端连接,作者转储他的数据,两端断开连接,每个人都很高兴。不要大惊小怪,不要大惊小怪。

    【讨论】:

    • 谢谢,我希望避免设置套接字,但您的观点绝对有效。
    【解决方案2】:

    在您的编写器进程中以读写模式打开管道,这应该可以防止它挂起:)

    【讨论】:

    • 如果我这样做了,我怎么知道其他进程何时打开读取?
    • 非阻塞打开返回什么错误?您是否尝试过使用读写模式的非阻塞模式?如果管道准备好写入,您应该能够测试(使用 select 或 poll) - 如果是,则意味着客户端已连接到另一端。
    • poll() 如果我在 RW 模式下打开它,它会立即返回可写,即使另一端尚未打开。
    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    相关资源
    最近更新 更多