2012-09-18 58 views
0

在我的C++程序中使用linux命令。試圖從數組列表中下載url,一旦下載完成,下一個開始....目前只下載數組中的第一個位置,然後停止。C++調用linux命令fork childs

有人看到我正在做的錯誤嗎?

// 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的東西,但我得到一個錯誤

+0

您能否提供一個完整的可編譯示例 - 然後我可能會嘗試使用您的代碼而不是忽略您的問題 –

回答

3

execl在啓動過程中會替換當前運行的進程。所以你的循環體只能運行一次。您應該將fork()置於循環內部,假設您想要關閉numberOfDownloadswget的實例。 (但要注意這樣的事情)

否則,使用system(),這將不會終止您的過程,但在wget退出後返回到您的循環。或者popen(),如果您需要更多的過程控制權並且想要讀取wget輸出,而不必自己完成所有的I/O重組過程。

+1

錯過了 - 很好的捕獲 –

+0

甚至使用'libcurl'庫執行HTTP請求,而不使用'wget' –