2012-05-22 62 views
0

我嘗試從unix中的C++程序調用wget。我想在使用fork之後在子進程中調用它,我需要使用exec而不是system()。我所做的是正確使用exec命令在unix中調用wget

pid_t pID = fork(); 
if (pID == 0) 
{ 
    execl("/bin/wget","wget", "http://google.gr",(char*)0); 
} 

,並期望有在同一個文件夾中的可執行文件是, 但這種情況不會發生,我應該如何去做正確的HTML文件?

+0

我不會建議完全限定路徑 - 並非每個系統上安裝的軟件都必須具有wget in/bin;有時它可能位於'/ usr/bin','/ usr/local/bin'等等。運行你的軟件的用戶可能有一個自定義的wget,他們希望在他們的本地PATH中使用它們。只需在第一個參數中用'wget'調用它就會導致搜索PATH,這樣就可以在任何地方找到二進制文件。 –

+0

非常感謝,實際上我做錯了的是該路徑是/ usr/bin/wget,但是您的建議是在第一個參數中使用wget調用它是正確的解決方案,再次感謝 – user985409

+0

我添加了一個描述使用正確錯誤處理 - 這樣做,你的程序會在這種情況下發出「找不到文件」的錯誤,所以很明顯是什麼問題 - 並重申上述評論的內容。 –

回答

1

首先,請勿使用/bin/wget - wget將不會始終安裝在/bin;僅在第一個參數中單獨傳遞wget將導致PATH被搜索。

其次,你不應該認爲execl不會返回。相反,您應該撥打perror()以正確記錄錯誤(然後在您的代碼中,以非零狀態退出)。

您還可以在父進程上使用strace -f查看正在發生的情況並查找exec,但在任何情況下向您的代碼添加錯誤處理都是正確的。