0

我目前正在尝试构建类似于|in linux 的东西,只要将它们连接在一起,它就应该能够接受 n 个参数。我通过将参数传递给它,然后传递包含参数及其选项的数组来执行这些参数(如lssort等) 。execvp()

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

希望我已经足够清楚了,已经很晚了,很抱歉模棱两可。

4

1 回答 1

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;
}
于 2013-11-14T07:24:12.827 回答