如何复用命名管道/ fifo

时间:2018-04-20 08:55:16

标签: named-pipes multiplexing

假设我们有一个命名管道:

node x.js > ${my_named_pipe} &
node y.js > ${my_named_pipe} &
node z.js > ${my_named_pipe} &

说有多个作者写这个命名管道:

int x,y;
try{
     x = Integer.parseInt(textField.getText().trim());
} catch(NumberFormatException ex) {
    x = 0;
}
try{
     y = Integer.parseInt(textField2.getText().trim());
} catch(NumberFormatException ex) {
    y = 0;
}
像这样的东西 - 是否有一种可靠的方式来复用它,以便每次都可以传递一条完整的消息,或者只能从一个编写器中读取命名管道?

这让我想知道我们如何复用端口/套接字等,我不知道它是如何完成的。

1 个答案:

答案 0 :(得分:1)

这可能是一个天真的答案,但这对我有用。

如果您有多个写入器写入一个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 stdbuf-运行COMMAND,对其标准流进行修改的缓冲操作。

仅当您的原始程序不调整其对标准输出流的缓冲时,此功能才起作用。