我有一個進程通過命名管道寫入另一個進程。讀者程序可能會行爲不當,不打開閱讀管道。如果發生這種情況,我的行爲良好的作家進程將掛在它的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. 在C命名管道上超時#
- 2. 寫入FIFO(命名管道)
- 3. 打開命名管道的問題
- 4. 如何打開命名管道?
- 5. 如何從VBScript打開命名管道?
- 6. 爲什麼在寫入命名管道時bash被關閉?
- 7. 無法寫入命名管道
- 8. 在讀取超時時寫入頻道
- 9. 對管道命令的超時調用
- 10. 單聲道在嘗試打開StreamWriter到命名管道時掛起
- 11. 命名管道:如何封閉,直到封閉寫入面重新打開?
- 12. fread超時'mod_fcgid:讀取超時管道'
- 13. 當管道讀取流寫入流時,聽寫嗎?
- 14. Linux上的MySQL,PHP和命名管道
- 15. 命名管道(matlab-> Linux)的短讀
- 16. 關閉時刪除命名管道
- 17. Linux fifo(命名管道)O_NONBLOCK中斷管道
- 18. 當管道寫入標準輸出時,爲什麼write()管道退出程序?
- 19. Azure DataFactory管道超時
- 20. 當連接到命名管道時,CreateFile()返回錯誤32(SHARING_VIOLATION)
- 21. 打開文件時不知道名稱
- 22. 寫入mysql時PHP超時
- 23. 在FIFO上打開(命名管道)凍結 - 忽略SIGINT,SIGTERM
- 24. WCF命名管道客戶端狀態總是打開
- 25. 命名管道將不會在C程序中打開
- 26. 我的C++程序無法打開命名管道
- 27. 等待命名管道在BASH中以下標打開?
- 28. 命名管道IPC
- 29. 每當我在Linux服務器上打開magento管理界面時,無法打開Magento管理界面
- 30. putpkt:寫入失敗,斷開管道
謝謝,我希望避免必須設置套接字,但您的觀點是絕對有效的。 – gimmeamilk 2012-03-08 11:39:10