C中shell实现中的多个管道

时间:2013-11-13 18:40:11

标签: c shell pipe

我正在尝试实现一个shell,除了多个管道外,我一切都运行得很好。 即ls -l -a -F | tr [a-z] [A-Z] | sort我该如何处理?我知道我必须创建多个管道来解决这个问题,但究竟如何做呢? 有人可以指导我朝正确的方向发展吗?

我目前只管理一个管道,但是当我有两个以上的管道时,我不太清楚如何处理这个问题。 我想知道是否有人可以提供一些伪代码来解决这个问题

2 个答案:

答案 0 :(得分:2)

按顺序解析字符串,当你到达管道符号时,你将最后一个命令分叉并将std存储在std中。如果您有先前的命令,则将该命令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的输入。

管道就像>一样,但你用fork运行“目标”。

答案 1 :(得分:0)

如果你确实让一切工作但多个管道,你可以使用分组或子壳将它们减少到单个管道。

{ ls -l -a -F | tr a-z A-Z; } | sort
(ls -l -a -F | tr a-z A-Z) | sort