我有两个二进制文件,其中一个 ( questions.bin
) 会抛出诸如“1+3 是多少?”之类的问题。到 STDOUT 并从 STDIN 获取答案;另一个,answers.bin
,以上述格式接受 STDIN 中的问题并将其打印到 STDOUT。
我希望能够将它们的输出通过管道相互传输,比如
./questions.bin | ./answers.bin | ./questions.bin
有什么办法可以用管道做到这一点吗?如果不是,否则你会怎么做?
答案1
答案2
在 Linux 上,您可以使用其中 fd x 指代管道的属性/dev/fd/x
,其行为类似于命名管道:
: | (./questions.bin | ./answers.bin) > /dev/fd/0
shell通过其系统调用yash
有一个原始接口pipe()
管道重定向特征:
(./questions.bin | ./answers.bin) >>|0
这些避免了必须创建命名管道(以及与保证独占创建、限制对它们的访问以及事后或信号时的清理相关的问题)。