0

使用一个简单的下载器,它将下载数组中的文件项。

目前它会下载数组中的第一个项目,但是当 for 循环去下载下一个项目时,它似乎停留在它已经下载的同一个项目上。

这意味着它不会递增到下一个项目,但它确实运行了它应该运行的次数。

即要下载2个项目,它将下载数组中的第一个项目两次。

我相信我做错了分叉过程,或者计数器在 for 循环中被重置

// Begin the downloading process
pid_t child = 0;
child = fork();
wait();
if ( child < 0)
{
    cout << "Process Failed to Fork" <<endl;
    return 1;
}
if (child == 0)
    {
        wait();
    }
else
{

    for(int i = 0; i < numberOfDownloads; i++)
    {
    child = fork();
    wait();
    execl("/usr/bin/wget", "wget",locations[i], NULL);  
    }
}
4

1 回答 1

0

问题是您的for循环分叉没有考虑孩子与父母,并且孩子和父母都执行execl()i==0。fork()您需要根据您之前在代码片段中所做的相同方式的返回来包装您的操作。

else
{
    for(int i = 0; i < numberOfDownloads; i++)
    {
        child = fork();
        if (child > 0) execl("/usr/bin/wget", "wget",locations[i], NULL);  
    }

    /* call wait() for each of your children here, if you wish to wait */
}
于 2012-09-18T19:19:16.160 回答