C++ 分叉子进程
在一个简单的下载程序上工作,它将下载一个数组中的文件项 当前,它将下载阵列中的第一个项目,但是当for循环转到下载下一个项目时,它似乎停留在已下载的项目上 这意味着它不会增加到下一个项目,但它确实运行了它应该运行的次数 i、 e.2要下载的项目,它将下载阵列中的第一个项目两次 我相信我的分叉过程做错了,或者计数器在for循环中被重置C++ 分叉子进程,c++,linux,fork,C++,Linux,Fork,在一个简单的下载程序上工作,它将下载一个数组中的文件项 当前,它将下载阵列中的第一个项目,但是当for循环转到下载下一个项目时,它似乎停留在已下载的项目上 这意味着它不会增加到下一个项目,但它确实运行了它应该运行的次数 i、 e.2要下载的项目,它将下载阵列中的第一个项目两次 我相信我的分叉过程做错了,或者计数器在for循环中被重置 // Begin the downloading process pid_t child = 0; child = fork(); wait(); if ( chi
// 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);
}
}
//开始下载过程
pid_t child=0;
child=fork();
等待();
if(子级<0)
{
cout问题在于,您的for
循环fork,而不考虑子对象与父对象,并且子对象和父对象都以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 */
}
else
{
for(int i=0;i0)execl(“/usr/bin/wget”,“wget”,位置[i],空);
}
/*如果您希望等待,请在此处为您的每个孩子调用wait()*/
}
您的程序并不是一个真正的下载程序,它只是wget
的包装器。您应该研究使用libcurl(用于HTTP客户端处理的库)。您可以在c++11中使用std::async