有没有办法在C中没有递归的情况下多次运行execvp()?

时间:2013-11-14 06:44:15

标签: c linux

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

然而,问题在于execvp()没有返回任何东西..所以当我fork()并进入子进程时,它会做它需要做的事情,execvp()然后进入父进程。现在我可以再次递归分叉并继续根据需要获得尽可能多的子进程并调用n execvp(),但我想知道是否有迭代方式做同样的事情。

希望我很清楚,已经很晚了,很抱歉这种含糊不清。

1 个答案:

答案 0 :(得分:0)

您可以在每个分支上使用wait(&status)。下面是一个使用argv作为文件描述符列表在fork中打开然后等待它们全部完成的示例。对于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;
}