Linux:打开命名管道进行写入时超时

Linux:打开命名管道进行写入时超时,linux,timeout,named-pipes,Linux,Timeout,Named Pipes,我有一个进程通过命名管道向另一个进程写入数据。读卡器进程可能会行为异常,无法打开管道进行读取。如果发生这种情况,行为良好的writer进程将挂起其open()调用。 我希望编写器能够在打开管道时超时,以便在读卡器未及时打开其端部时,它可以清理并继续运行。Nonblocking open()立即返回错误。在编写器进程中,以读写模式打开管道,这将防止管道挂起:)如果是一个选项,请在类似的情况下使用unix域套接字。由于FIFO的语义,这是一种笨拙的方式,而且你很可能会在开放之后遇到问题。如果有必要的

我有一个进程通过命名管道向另一个进程写入数据。读卡器进程可能会行为异常,无法打开管道进行读取。如果发生这种情况,行为良好的writer进程将挂起其open()调用。
我希望编写器能够在打开管道时超时,以便在读卡器未及时打开其端部时,它可以清理并继续运行。Nonblocking open()立即返回错误。

在编写器进程中,以读写模式打开管道,这将防止管道挂起:)

如果是一个选项,请在类似的情况下使用unix域套接字。由于FIFO的语义,这是一种笨拙的方式,而且你很可能会在开放之后遇到问题。如果有必要的话,这种设计将不能扩展到一个客户机之外。你也许能在短期内将你的意愿强加给FIFO,但我怀疑你会后悔的


插座是一个更自然的适合这一点。您的侦听套接字非常适合您现有的poll(),客户端连接,编写器转储数据,两端断开连接,每个人都很高兴。无事生非。

如果我这样做,我如何判断另一个进程何时已打开进行读取?非阻塞打开返回什么错误?您是否尝试了读写模式下的非阻塞模式?您应该能够测试(使用select或poll)管道是否已准备好写入-如果已准备好,则表示客户端已连接到另一端。如果我已在RW模式下打开了poll(),即使另一端尚未打开,poll()也会立即返回writable。谢谢,我希望避免设置套接字,但您的观点绝对有效。