我有一个进程通过命名管道写入另一个进程。读者程序可能会行为不当,不打开阅读管道。如果发生这种情况,我的行为良好的作家进程将挂在它的open()调用上。 我想让作者在打开管道时能够超时,以便在读者未及时打开它时清理并继续运行。非阻塞open()立即返回错误。Linux:当打开命名管道写入时超时
回答
如果它是一个选项,使用UNIX域套接字像这样的场景。由于FIFOs的语义,这是一种尴尬的方式来做到这一点,你很可能会遇到问题,无论如何都会遇到问题。如果这种设计变得必要,这种设计不会超越一个客户。你可能会在短期内强制执行你对FIFO的意愿,但我怀疑你会后悔的。
套接字更适合于此。您的监听套接字很适合您现有的调查(),客户端连接,作者转储他的数据,两端都断开连接,每个人都很高兴。没有大惊小怪,没有麻烦。
在你写进程打开读写模式下的管道,应该防止它挂:)
如果我这样做,我怎么知道其他进程何时打开阅读? – gimmeamilk 2012-03-07 23:39:26
非阻塞打开返回什么错误?您是否尝试使用读写模式的非阻塞模式?您应该能够测试(使用select或poll)管道是否准备好写入 - 如果这意味着客户端已连接到另一端。 – sirgeorge 2012-03-07 23:48:54
如果我已经在RW模式下打开它,poll()立即返回可写,即使另一端尚未打开。 – gimmeamilk 2012-03-07 23:59:30
- 1. 写入FIFO(命名管道)
- 2. 在C命名管道上超时#
- 3. 如何从VBScript打开命名管道?
- 4. 打开命名管道的问题
- 5. 如何打开命名管道?
- 6. 为什么在写入命名管道时bash被关闭?
- 7. 无法写入命名管道
- 8. 在读取超时时写入频道
- 9. 命名管道挂起写
- 10. 对管道命令的超时调用
- 11. 单声道在尝试打开StreamWriter到命名管道时挂起
- 12. 如何写入命名管道,不要等待读取管道
- 13. 命名管道:如何封闭,直到封闭写入面重新打开?
- 14. fread超时'mod_fcgid:读取超时管道'
- 15. WCF命名管道在WinApp中超时,但不在ConsoleApp中?
- 16. 如何在ruby中超时命名管道?
- 17. 如何使用命名管道设置fopen超时
- 18. 命名管道服务器读取超时
- 19. 当管道读取流写入流时,听写吗?
- 20. 带管道输入的Bash超时
- 21. 终端打开时运行命令(Linux)
- 22. 命名管道(matlab-> Linux)的短读
- 23. 在Windows/Mac/Linux上的命名管道?
- 24. Linux上的MySQL,PHP和命名管道
- 25. Linux命令 - 管道命令
- 26. 创建命名管道时Vbscipt错误
- 27. 关闭时删除命名管道
- 28. Linux命令行与Linux命令管道
- 29. Linux fifo(命名管道)O_NONBLOCK中断管道
- 30. 无法在Linux中写入管道
谢谢,我希望避免必须设置套接字,但您的观点是绝对有效的。 – gimmeamilk 2012-03-08 11:39:10