有没有一种方法可以在C中多次运行execvp()而不使用递归?

有没有一种方法可以在C中多次运行execvp()而不使用递归?,c,linux,C,Linux,我目前正在尝试在linux中构建类似于|的东西,只要它们通过管道连接在一起,它就应该能够容纳n个参数。我使用execvp()执行这些参数(如ls,sort,等等),方法是先传递参数,然后传递包含参数及其选项的数组 然而,问题在于execvp()不返回任何内容。。因此,当我fork()进入子进程时,它会做它需要做的事情,execvp()然后进入父进程。现在我可以递归地再次分叉,继续获得所需的任意多个子进程,并调用n个execvp(),但我想知道是否有迭代的方法来做同样的事情 希望我说得够清楚了,已

我目前正在尝试在linux中构建类似于
|
的东西,只要它们通过管道连接在一起,它就应该能够容纳n个参数。我使用
execvp()
执行这些参数(如
ls
sort
,等等),方法是先传递参数,然后传递包含参数及其选项的数组

然而,问题在于
execvp()
不返回任何内容。。因此,当我
fork()
进入子进程时,它会做它需要做的事情,
execvp()
然后进入父进程。现在我可以递归地再次分叉,继续获得所需的任意多个子进程,并调用n个
execvp()
,但我想知道是否有迭代的方法来做同样的事情

希望我说得够清楚了,已经很晚了,所以很抱歉含糊不清

您可以在每个fork上使用
wait(&status)
。下面是一个使用argv作为文件描述符列表的示例,这些文件描述符将在forks中打开,然后等待它们全部完成。对于exec*函数,它将等待退出

int main(int argc, char **argv){
    unsigned int i,fd,*status;
    for(i=1;i<argc;++i){
        if(fork()==0){
            fd = open(argv[i], 04000);
            if (fd<2) return 2;
            //do stuff with fd
            close(fd);
            //do stuff with data
            return 0;
        }
    }
    while(i--){
        wait(&status);
        //do stuff with status
    }
    return 0;
}
int main(int argc,char**argv){
无符号整数i,fd,*状态;

对于(i=1;这个问题的答案使用了一种迭代的方法。我现在来看看,谢谢你指出它!该死的,巴尔马……我想你可能刚刚救了我的命。