我有一個進程通過命名管道寫入另一個進程。讀者程序可能會行爲不當,不打開閱讀管道。如果發生這種情況,我的行爲良好的作家進程將掛在它的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