2016-03-17 40 views
-1

我想知道命令是否成功運行而沒有錯誤。我試圖:C - execve()在命令錯誤時不返回-1

if (execve(buf, pl->argv, environ) != -1) { 
    perror(buf); 
    laststatus = 1; 
} 

在例如「lss」的情況下,我會回到-1。但是諸如「ls fs」(無效)的情況下,ls會打印出錯誤,但execve會返回成功。

當傳遞給execve的命令分別執行成功或失敗時,如何將laststatus設置爲0或1。

附加:

buf是命令名稱( 'LS' 針對這種情況)

pl->args是arguments

+1

你將不得不爲'父'中的孩子'wait()'。這樣你可以檢查孩子的返回碼。 – EOF

+1

@EOF不是'execve()'不應該返回? – Zermingore

+1

@ J.P.Quenord-Zermingore:*函數*不返回(如果成功)。 *進程*最終會終止,並將退出代碼返回給其父代。 – EOF

回答

1

感謝您的幫助鏈表!

對於其他人,如果execve命令失敗,我使用以下返回非零值。

// in parent 
    wait(&statval); 
    if(WIFEXITED(statval)) { 
     if (WEXITSTATUS(statval) == 0) 
      laststatus = 0; // command in execve exited with 0 
     else 
      laststatus = 1; // command exited with non-zero. 
    }