我们正在尝试使用系统调用在C中实现我们的自定义shell . 当我们尝试添加管道系统功能时,程序在打印管道操作的输出后直接终止 . 管道按原样运行 . 但通常我们的shell永远不会在enterin常规命令后终止 . 这是我们的管道代码:
while(1){
if (childpid == 0) {
dup2(pipefd[1], 1);
close(pipefd[1]);
execvp(pipeInput(args,counter)[0], pipeInput(args, counter);
exit(0);
} else if(childpid >0){
dup2(pipefd[0], 0);
close(pipefd[0]);
close(pipefd[1]);
wait(NULL);
execvp(pipeOutput(args,counter)[0], pipeOutput(args, counter);
}
}
pipeInput
和 pipeOutput
方法在|之前和之后的组参数标志 . 他们工作正常 . args
保存该迭代中的所有参数 . 这不是完整的代码,但我认为这部分就足够了 . 我已尝试在顶级子项中使用 fork a new child ,并通过向其发送输出将顶级子项用作父项 . 这也适用于一次,循环进入下一次迭代 . 在第二次迭代中,当我尝试打印 ls | sort
时,它直接打印ls并挂起 .