This question already has answers here:
Closed 5 years ago.
Connecting n commands with pipes in a shell?
(2个答案)
我正在尝试实现一个shell,除多个管道外,所有的工作都很好。
我怎样才能做到这一点?我知道我必须创建多个管道来解决这个问题,但具体怎么做呢?
有人能指引我正确的方向吗?
我目前只管理一个管道,但当我有两个以上管道时,我不太确定如何处理这个问题。
我想知道是否有人能提供一些伪代码来解决这个问题

最佳答案

只需按顺序分析字符串,当您得到一个管道符号时,您将从最后一个命令分叉并存储std in和std out。如果您有一个先前的命令,您可以将该命令std输出到新命令的std输入。然后你循环。
附加说明:
唯一的区别

A)    thing1 > thing2


B)    thing1 | thing2

这是不是在A)中运行thing1(使用fork)并将输出设置为一个名为thing2的文件
在B)中,使用fork运行thing1和thing2,并将thing1的输出设置为thing2的输入。
所以,
C)     thing1 | thing2 | thing3

同样,您需要运行(fork)thing1、thing2、thing3,并将thing1的输出设置为thing2的输入,将thing2的输出设置为thing3的输入。
Pipe的工作方式与>类似,但您使用fork运行“target”。

10-07 17:46