2009-02-25 25 views
8

我正在爲POSIX(OSX)編寫一個程序,我將有很多進程將消息發送給一個監聽器,而這個監聽器本質上是一個日誌記錄線程。所有這些進程都在單獨的程序中運行,並使用許多進程寫入的單個命名管道(FIFO),但只有一個進程讀取是非常誘人的。是否有影響讓許多進程寫入到posix中命名管道上的單個閱讀器?

問題:

1)這項工作? - 我可以使用bash設置一個帶有多個進程的fifo來寫這個工作,所以我從理論上知道這是有效的。但在實踐中,我是否在談論這些問題?

殼#1

$ mkfifo /tmp/fifo 
$ cat /tmp/fifo 

殼#2和#3

$ cat > /tmp/fifo 
"Type stuff here, after hitting enter, it is read by shell #1" 

2)如果每個寫入只寫相對短消息(< 100字節?),則可以予假定每個呼叫寫()將會發送給讀者的整體?或者,一封郵件中的一半是否會有來自不同作者的另一封郵件的一半亂碼的風險?

感謝您的任何建議。

回答

10

FIFO寫入應該是原子的,只要它在頁面大小下面。所以100字節的消息不應該有問題。在Linux上,最大尺寸曾經是4K,我相信它現在更大。我在幾個系統上使用了這種技術來傳遞消息,因爲寫操作最終是原子性的。

如果您正在使用一系列寫入操作,則可能最終出現問題,因爲輸出緩衝可能導致同步問題。所以請確保整個消息一次寫入。例如。建立一個字符串,然後打印,不要一次打印多件。

s="This is a message" 
echo $s 

echo "This " 
echo "is " 
echo " a message" 
+0

歡迎您:) – sfossen 2009-02-25 20:55:49

相關問題