2016-09-27 35 views
0
int spawn(char* program, char** args) { 

pid_t child_pid; 
child_pid = fork(); 

if(child_pid > 0) {/
     wait(NULL); 
     return (int)child_pid; 
} 

else { 
    if(execvp(program, args) == -1){ 
     exit(EXIT_FAILURE); 
    } 
    return (int)child_pid; 
    } 
} 

我知道這段代碼有點混亂,但請耐心等待:我試圖創建自己的shell。這是啓動一個新的子進程並執行代碼的函數。但是,我輸入字符串時無法返回錯誤。當execvp找不到程序時返回錯誤

例如,如果我輸入「heyman」,我只是想回到'heyman',而我想得到某種錯誤('heyman'不是命令)。

我希望退出(EXIT_FAILURE)會這樣做,但它沒有。希望如果有人能幫我在這裏

回答

3

使用perror()報告錯誤。

if (execvp(program, args) == -1) { 
    perror("execvp"); 
    exit(EXIT_FAILURE); 
} 

沒有必要在子函數中使用return (int)child_pid。如果execvp()成功,則運行後沒有任何代碼;如果失敗,則報告錯誤並退出。

+0

工作。你能告訴我你是如何知道這個或你從哪裏找到的?我想知道一個我可以用於linux編程的源代碼,而不是經常問問題 – qaispak

+0

我在哪裏學習了'perror()'?我不記得,我已經瞭解了20多年。任何體面的Unix編程教科書都應該有它。 – Barmar

相關問題