【发布时间】:2012-03-07 23:30:51
【问题描述】:
我有一个进程通过命名管道写入另一个进程。阅读器进程可能会行为不端并且不打开管道进行阅读。如果发生这种情况,我表现良好的编写器进程将挂起它的 open() 调用。 我希望写入器在打开管道时能够超时,以便在读取器没有及时打开它的末端时它可以清理并继续运行。非阻塞 open() 立即返回错误。
【问题讨论】:
标签: linux timeout named-pipes
我有一个进程通过命名管道写入另一个进程。阅读器进程可能会行为不端并且不打开管道进行阅读。如果发生这种情况,我表现良好的编写器进程将挂起它的 open() 调用。 我希望写入器在打开管道时能够超时,以便在读取器没有及时打开它的末端时它可以清理并继续运行。非阻塞 open() 立即返回错误。
【问题讨论】:
标签: linux timeout named-pipes
如果是一个选项,请在这样的场景中使用 unix 域套接字。由于 FIFO 的语义,这是一种笨拙的方法,而且无论如何您都可能会遇到问题。如果有必要,这种设计不会扩展到一个客户之外。您也许可以在短期内对 FIFO 强制执行您的意愿,但我怀疑您会后悔的。
套接字更适合这种情况。您的侦听套接字非常适合您现有的 poll(),客户端连接,作者转储他的数据,两端断开连接,每个人都很高兴。不要大惊小怪,不要大惊小怪。
【讨论】:
在您的编写器进程中以读写模式打开管道,这应该可以防止它挂起:)
【讨论】: