代码之家  ›  专栏  ›  技术社区  ›  Aftermathew

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

  •  8
  • Aftermathew  · 技术社区  · 17 年前

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

    问题:

    1) 这行吗我可以使用bash设置一个fifo,并向其写入多个进程,因此我知道在理论上这是可行的。但在实践中,是否有我在掩饰的问题?

    外壳#1

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

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

    2) 如果每个编写器只编写相对较短的消息(<100字节?),那么我是否可以假设对write()的每个调用都将全部发送给读卡器?或者,一封邮件的一半会有被另一位作者的另一半邮件弄错的风险吗?

    1 回复  |  直到 17 年前
        1
  •  12
  •   sfossen    17 年前

    如果您使用的是一系列写入操作,那么最终可能会出现问题,因为输出缓冲可能会导致同步问题。因此,请确保整个信息一次完成。建立一个字符串,然后打印,不要一次打印多个片段。

    s="This is a message"
    echo $s
    

    echo "This "
    echo "is "
    echo " a message"
    
    推荐文章