当前位置:  开发笔记 > 编程语言 > 正文

在posix中有多个进程写入命名管道上的单个阅读器会有影响吗?

如何解决《在posix中有多个进程写入命名管道上的单个阅读器会有影响吗?》经验,为你挑选了1个好方法。

我正在为POSIX(OSX)编写一个程序,我将有许多进程向一个监听器发送消息,该监听器本质上是一个日志记录线程.所有进程都在单独的程序中运行,并且使用许多进程写入的单个命名管道(FIFO),但只有一个进程读取是非常诱人的.

问题:

1)这会有效吗? - 我可以使用bash来设置一个包含多个进程写入的fifo,所以我从理论上知道这是有效的.但在实践中,是否存在我正在掩饰的问题?

shell#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字节?),那么我可以假设每次调用write()都将被发送给读者吗?或者一条消息的一半会有来自另一位作者的另一半消息的乱码风险?

谢谢你的建议.



1> sfossen..:

FIFO写入应该是原子的,只要它在页面大小之下.因此,100字节消息不应该存在问题.在Linux上,最大尺寸曾经是4K,我相信它现在更大了.我在一些系统上使用这种技术进行消息传递,因为写入最终是原子的.

如果使用一系列写入,则最终会出现问题,因为输出缓冲可能会导致同步问题.因此,请确保一次写入整个消息.例如.构建一个字符串,然后打印,不要一次打印多个部分.

s="This is a message"
echo $s

echo "This "
echo "is "
echo " a message"

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有