2014-04-16 88 views
3

我正在嘗試執行一些程序間數據交換,並決定使用命名管道進行一些操作。 我有一個非常基本的閱讀器和一個非常基本的作家,取自示例答案here有關C++和命名管道的基本問題

  • 我的第一個問題是,我不能同時採用兩種時間write(...)除非我讓程序睡眠。有沒有辦法解決這個問題? 在每次錄入後會打電話給sleep(1)會使處理時間爆炸。

  • 我還想將多個進程寫入同一個fifo。那可能嗎?我的嘗試返回了不少問題...

  • 最後有沒有辦法讓fifo攜帶一個對象而不是一個字符串?

+0

_'C++ named pipes'_沒有這種東西?!? –

+0

如果我在C++和命名管道之間添加「&」會更好嗎? – Ant

+0

我這麼認爲...... –

回答

2

1)寫入 - 檢查寫入結果。如果管道的另一端未打開,則寫入的字節數將爲0.

2)不可能,但可以有一個服務器FIFO用於接收請求。然後它爲每個客戶端進程生成一個管道名稱以連接併發送給客戶端。客戶端讀取服務器管道,關閉服務器管道並使用服務器給出的新名稱打開管道。服務器必須在不同的線程中輪詢所有管道。

3)這只是一個寫 - 它可以採取任何事情。只需以二進制形式轉儲整個對象。請注意,對象中不應該有任何指針,因爲指針不會指向相同的地址空間。

+0

我不明白你的第一點。你的意思是試圖寫,直到我沒有得到例外?大約2和3,謝謝。你回答了我的問題 – Ant

+0

寫入返回寫入的字節數。如果管道的另一端未打開,它將返回0.如果您不希望再等一秒鐘,您可以使用unistd.h中的usleep。它不會拋出異常:這是C:不是C++。 – cup