2012-03-07 120 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