2009-02-25 30 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

相关问题