我有一个进程通过命名管道写入另一个进程。阅读器过程可能会出现行为异常而无法打开阅读管道。如果发生这种情况,我的表现良好的编写器进程将挂起其open()调用。 我希望编写器能够在打开管道时超时,这样如果读者没有及时打开它,它可以清理并继续运行。非阻塞open()会立即返回错误。
答案 0 :(得分:3)
如果是一个选项,请使用unix域套接字来实现这样的场景。由于FIFO的语义,这是一种尴尬的方式来做到这一点,你可能会在开放之前遇到问题。如果有必要,这种设计不会超出一个客户。你可以在短期内强制执行你对FIFO的意愿,但我怀疑你会后悔。
插座更适合这种情况。你的监听套接字非常适合你现有的poll(),客户端连接,编写器转储他的数据,两端断开连接,每个人都很高兴。没有大惊小怪,没有麻烦。
答案 1 :(得分:0)
在您的编写器进程中以读写模式打开管道,这应该阻止它挂起:)