0

単純なダウンローダーで作業しており、ファイルアイテムを配列でダウンロードします。

現在、配列の最初のアイテムをダウンロードしますが、forループが次のアイテムをダウンロードする場合、すでにダウンロードしたアイテムと同じままであるように見えます。

つまり、次のアイテムに増分することはありませんが、必要な回数だけ実行されます。

つまり、2つのアイテムをダウンロードすると、配列の最初のアイテムが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 に答える