2012-03-07 90 views
4

我有一个进程通过命名管道写入另一个进程。读者程序可能会行为不当,不打开阅读管道。如果发生这种情况,我的行为良好的作家进程将挂在它的open()调用上。 我想让作者在打开管道时能够超时,以便在读者未及时打开它时清理并继续运行。非阻塞open()立即返回错误。Linux:当打开命名管道写入时超时

回答

3

如果它是一个选项,使用UNIX域套接字像这样的场景。由于FIFOs的语义,这是一种尴尬的方式来做到这一点,你很可能会遇到问题,无论如何都会遇到问题。如果这种设计变得必要,这种设计不会超越一个客户。你可能会在短期内强制执行你对FIFO的意愿,但我怀疑你会后悔的。

套接字更适合于此。您的监听套接字很适合您现有的调查(),客户端连接,作者转储他的数据,两端都断开连接,每个人都很高兴。没有大惊小怪,没有麻烦。

+0

谢谢,我希望避免必须设置套接字,但您的观点是绝对有效的。 – gimmeamilk 2012-03-08 11:39:10

0

在你写进程打开读写模式下的管道,应该防止它挂:)

+0

如果我这样做,我怎么知道其他进程何时打开阅读? – gimmeamilk 2012-03-07 23:39:26

+0

非阻塞打开返回什么错误?您是否尝试使用读写模式的非阻塞模式?您应该能够测试(使用select或poll)管道是否准备好写入 - 如果这意味着客户端已连接到另一端。 – sirgeorge 2012-03-07 23:48:54

+1

如果我已经在RW模式下打开它,poll()立即返回可写,即使另一端尚未打开。 – gimmeamilk 2012-03-07 23:59:30