圆形 bash 管道 (./progA | ./progB | ./progA)

圆形 bash 管道 (./progA | ./progB | ./progA)

我有两个二进制文件,其中一个 ( questions.bin) 会抛出诸如“1+3 是多少?”之类的问题。到 STDOUT 并从 STDIN 获取答案;另一个,answers.bin,以上述格式接受 STDIN 中的问题并将其打印到 STDOUT。

我希望能够将它们的输出通过管道相互传输,比如

./questions.bin | ./answers.bin | ./questions.bin

有什么办法可以用管道做到这一点吗?如果不是,否则你会怎么做?

答案1

事实证明,这是一个简单的使用案例命名管道。这是我得到的一个修改后的例子这个答案:

mkfifo backpipe
./questions.bin 0<backpipe | ./answers.bin 1>backpipe

答案2

在 Linux 上,您可以使用其中 fd x 指代管道的属性/dev/fd/x,其行为类似于命名管道:

: | (./questions.bin | ./answers.bin) > /dev/fd/0

shell通过其系统调用yash有一个原始接口pipe()管道重定向特征:

(./questions.bin | ./answers.bin) >>|0

这些避免了必须创建命名管道(以及与保证独占创建、限制对它们的访问以及事后或信号时的清理相关的问题)。

相关内容