2015-11-03 116 views
1

我正在尋找一種方法來確定函數execvp是成功還是失敗。我知道如果它返回那麼它失敗了,但我正在尋找從execvp啓動的命令失敗的情況。例如在「ls」試圖列出不存在的文件夾的情況下。由此我計劃添加對邏輯運算符的支持(例如& &,||)。謝謝。確定execvp是成功還是失敗

else { 
    int status; 
    if (wait(&status) < 0) { 
     perror("wait failed"); 
     exit(0); 
    } 
    if (status == 0) { 
     success = true; 
    } 
    else { 
     success = false; 
    } 
} 

回答

3

您需要首先fork()一個新的進程,然後有新的進程調用execvp。然後父進程應該調用wait(),這將允許它檢索您運行的命令的退出狀態(在這種情況下爲ls)。

當檢查從wait()檢索到的返回狀態時,請確保使用WIFEXITED()確保孩子正常退出,並使用WEXITSTATUS()提取退出狀態。

+0

現在我有這個,在我的檢查結束,看看叉是否失敗。但我不認爲我正在尋找來自地位的正確信息。 'else if(c_pid> 0){0} {pid = waitpid(c_pid,&status,0); if(pid == -1){perror(「wait failed」); \t exit(0); \t} if(status == 0){ \t success = true; \t} success = false;如果((pid = wait(&status))<0){ / /* perror(「wait ...」); exit(1); } */ }' – xythyl

+0

@xythyl使用您的代碼更新您的問題。在評論中閱讀是不可能的。 – dbush

+0

謝謝!另外,如何正確地在這裏發佈代碼?出於某種原因,它沒有保存任何格式。 – xythyl

相關問題