使用简单的下载程序,它将下载数组中的文件项。
目前它将下载数组中的第一项,但是当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);
}
}
答案 0 :(得分:0)
问题是你的for
循环分叉而没有考虑子项与父项,而子项和父项都使用i == 0执行execl()
。您需要根据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 */
}