在C中使用多个管道时如何处理命令

时间:2013-11-14 15:23:14

标签: c shell fork pipe

我正在实现一个shell,我让一切都运行得很好。我现在面临的问题是如何管理多个管道?例如ls -a -l -F | tr [a-z] [A-Z] |排序

问题:我有这个数组,我想分开命令,以便我可以处理每个进程

args[0]= ls  
args[1]= -a  
args[3]= -l   
args[4]= -F  
args[5]= |  
args[6]= tr  
args[7]= [a-z]  
args[8]= [A-Z]  
args[9]= |  
args[10]= sort

我每次找到'|'时如何分离命令?所以我最终得到这样的东西

    args1[0]= ls  
    args1[1]= -a  
    args1[3]= -l   
    args1[4]= -F 

    args2[0]= tr  
    args2[1]= [a-z]  
    args2[2]= [A-Z] 

    args3[0] = sort

非常感谢您的帮助,非常感谢任何反馈

1 个答案:

答案 0 :(得分:3)

你需要多个管道。每个管道将从流程 n 获取标准输出,并将其提供给流程 n + 1 的标准输入。您不能共享管道,否则您的stdout将在进程之间交错。

This response对类似的问题可能有用。