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