gpt4 book ai didi

c - 有没有办法在 C 中多次运行 execvp() 而无需递归?

转载 作者:行者123 更新时间:2023-11-30 17:44:30 25 4
gpt4 key购买 nike

我目前正在尝试构建类似于 | 的东西在linux中,它应该能够接受n个参数,只要它们通过管道连接在一起。我使用 ls 执行这些参数(如 sortexecvp() 等)通过向其传递参数,然后传递保存该参数及其选项的数组。

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

希望我说得足够清楚,已经很晚了,对于含糊之处深表歉意。

最佳答案

您可以在每个 fork 上使用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;
}

关于c - 有没有办法在 C 中多次运行 execvp() 而无需递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19971299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com