gpt4 book ai didi

ipc - 在 posix 的命名管道上将多个进程写入单个读取器是否会产生影响?

转载 作者:行者123 更新时间:2023-12-04 06:51:46 24 4
gpt4 key购买 nike

我正在为 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() 的调用都将完整地发送给读者吗?或者,一条消息的一半是否会与来自不同作者的另一条消息的一半混淆?

感谢您的任何建议。

最佳答案

FIFO 写入应该是原子的,只要它在页面大小以下。所以 100 字节的消息应该没有问题。在 linux 上,最大大小曾经是 4K,我相信它现在更大了。我已经在一些系统上使用了这种技术来进行消息传递,因为写入最终是原子的。

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

s="This is a message"
echo $s

不是
echo "This "
echo "is "
echo " a message"

关于ipc - 在 posix 的命名管道上将多个进程写入单个读取器是否会产生影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/587727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com