假设我们有一个命名管道:
mkfifo my_named_pipe
假设有多个写入者写入此命名管道:
node x.js > ${my_named_pipe} &
node y.js > ${my_named_pipe} &
node z.js > ${my_named_pipe} &
类似的事情 - 是否有一种可靠的方法来多路复用它,以便每次都通过一个完整的消息,或者命名管道可以仅从一个写入器可靠读取?
这让我想知道我们如何复用端口/套接字等,我不知道它是如何完成的。
这可能是一个有点幼稚的答案,但这对我有用。
如果单个 FIFO 有多个写入器,并且您不希望它们的输出被破坏,那么您可以使用
stdbuf
,但前提是输出是基于行的。整个段落仍将交错。
stdbuf -oL node x.js > ${my_named_pipe} &
stdbuf -oL node y.js > ${my_named_pipe} &
stdbuf -oL node z.js > ${my_named_pipe} &
:man stdbuf
- 运行 COMMAND,并修改其标准流的缓冲操作。stdbuf
这仅在您的原始程序不调整其标准输出流的缓冲时才有效。
我使用 ChatGPT 并得到了这个答案(我对 ChatGPT 的原始问题在评论中):
Unix套接字和命名管道(也称为FIFO)都是类Unix操作系统中的进程间通信机制,但它们的用途略有不同,并且在复用方面也有一些差异。
Unix 套接字:
命名管道 (FIFO):