2012-06-09 53 views
-1

我試圖在兩個進程(如聊天室)之間進行通信。每個進程都有自己的終端窗口。我正在使用命名管道進行通信。使用命名管道和信號量進行兩個進程之間的通信

這裏就是我所做的:

我有一個名爲 「MYFILE」 FIFO_FILE。過程A將新行寫入MYFILE,過程B從MYFILE讀取並將行輸出到過程B的終端顯示。然而,如果進程B想要寫一個新行到MYFILE,(根據我對信號量的理解),進程A將被阻止讀/寫MYFILE,直到進程B完成寫入。

我想實現的是:當兩個進程想要寫入時,當其他進程在寫入文件之前,其他進程都不應該被阻塞。

我能想到的唯一方法是有兩個FIFO_FILE。但是如何實現這個實現呢? 還是有其他方法可以實現嗎?

我被告知使用Consumer-Producer模式,但我不明白這將如何解決我的問題。

任何幫助將是偉大的。謝謝!!

回答

0

假設某種* nix的環境,這一點將無法工作。只要管道長度在PIPE_BUF以下,管道讀/寫保證是原子的。讓兩個進程同時寫入同一個fifo並沒有什麼意義。把它想像寫入一個文件 - 爲什麼你想要兩個獨立寫入的內容被穿插?你如何理解它?

你真的應該考慮使用多個fifos。即使那樣你也可能需要使用多線程或非阻塞FIFO,並且可以使用selectpoll來實現我認爲你真正想達到的目標。

+0

我在想雙向聊天程序,因爲沒有人在輸入消息的時候被阻塞,而不是像輸出一些東西,並等待來自另一個進程的回覆。但我一定會看到「多個FIFOs」---從未想過這個術語,但謝謝! – user1420474

+0

我想我們可能會說話過去。一個FIFO的問題是兩個進程都必須以讀/寫方式打開它。我懷疑你認爲讀者一定會收到作者寫的東西。 FIFOs的情況並非如此。根據時間的不同,完整的可能過程A可以寫入FIFO,然後立即讀取它剛剛寫入的內容。進程B永遠不會看到它。使用2個FIFO時,一個進程讀取1個FIFO,另一個寫入它。與第二個FIFO相反。或者簡化你的生活,並使用更適合這個的unix域套接字。 – Duck

相關問題