编辑问题的一半已修复,问题已经过编辑以反映修复问题。我仍然只看到它在一系列管道中执行第一个命令。
我在我的shell中最后一件事就是从头开始制作。我希望能够解析像"finger | tail -n +2 | cut -c1-8 | uniq | sort"
这样的命令,我认为我很接近。我现在所拥有的,当该行作为字符串数组给出时,只执行“手指”部分。
以下是代码中不能正常工作的部分,我已经将其缩小到这个for循环和后面的部分:
mypipe[2];
//start out with stdin
oldinfd = 0;
//run the beginning commands. connect in/out of pipes to eachother.
for(int i = 0; i < max; i++){
pipe(mypipe);
processline(commands[i], oldinfd, mypipe[1]); //doesn't wait on children
close(mypipe[1]);
oldinfd = mypipe[0];
}
//run the final command, put output into stdout
processline(commands[max], oldinfd, 1); //waits on children
...
这个循环运行程序,应该看起来像这样:
stdin - &gt; [0]管道[写入] - &gt; [read] pipe [write] - &gt; ... - &gt; [read] pipe [1] - &gt;标准输出
我的过程线功能需要一行('finger')和exec
。例如,processline("finger", 0, 1)
运行finger
命令没有缺陷。出于这个问题的目的,假设流程线工作正常,我遇到的麻烦是我如何使用管道以及它们的写入和读取结束。
对于印刷声明,我已确认正确的单词被发送到正确的部分。 (for循环接收“finger”,“tail -n +2”,“cut -c1-8”和“uniq”,而最后一行接收的命令[max]是“sort”)。