c ++调用linux命令forks子

时间:2012-09-18 02:37:01

标签: c++ linux fork wget

在我的c ++程序中使用linux命令。尝试从一个数组列表中下载一个URL,一旦下载完成,下一个开始....目前只下载数组中的第一个位置,然后停止。

有人看到我正在做的错误吗?

// Begin the downloading process
pid_t child = 0;
child = fork();

if ( child < 0)
{
    cout << "Process Faileld to Fork<<endl;
    return 1;
}
if (child == 0)
    {
        wait(NULL);
    }
else
{
    for(int i = 0; i < numberOfDownloads; i++)
    {
    execl("/usr/bin/wget", "wget",locations[i], NULL);  
    }
}

尝试使用命令wget下载某些东西,但是我收到错误

1 个答案:

答案 0 :(得分:3)

execl用已启动的进程替换当前正在运行的进程。所以你的循环体只运行一次。您应该将fork()放在循环中,假设您要分叉numberOfDownloads wget个实例。 (但要注意这些事情)

否则,请使用system(),它不会终止您的流程,但会在wget退出后返回您的循环。或者popen(),如果您需要对流程进行更多控制并想要阅读wget输出,而无需自己进行所有I / O重量提升。