2017-06-13 132 views
1

我有一個shell腳本,它包含以下幾行:得到一個shell腳本的退出代碼,在C程序

if [ $elof -eq 1 ]; 
then exit 3 
else if [ $elof -lt 1 ];then 
    exit 4 
else 
    exit 5 
fi 
fi 

在我的C程序中,我使用popen來執行這樣的腳本:

char command[30]; 
char script[30]; 
scanf("%s", command); 
strcpy(script, "./myscript.sh "); 
strcat(script, command); 
FILE * shell; 
shell = popen(script, "r"); 
if(WEXITSTATUS(pclose(shell))==3) { 
    //code 
} 
else if(WEXITSTATUS(pclose(shell))==4){ 
    //code 
} 

現在,我該如何獲得腳本的退出代碼?我試着用WEXITSTATUS,但它不工作:

WEXITSTATUS(pclose(shell)) 
+0

什麼你出不給予足夠的上下文。請用預期的和實際的輸出顯示完整的代碼。 – dbush

+1

顯示更多的C代碼... btw,如果WIFEXITED()評估* true,那麼應該只使用'WEXITSTATUS()* –

+0

我編輯了我的C代碼。 –

回答

3

After you have closed a stream, you cannot perform any additional operations on it.

你不應該叫readwrite甚至pclose你叫一個文件對象上pclose後!

pclose表示您已完成FILE *,它將釋放所有基礎數​​據結構(proof)。

調用它第二次可以產生任何東西,包括0

您的代碼應該是這樣的:

... 
int r = pclose(shell); 
if(WEXITSTATUS(r)==3) 
{ 
      printf("AAA\n"); 
} 
else if(WEXITSTATUS(r)==4) 
{ 
      printf("BBB\n"); 
} else { 
    printf("Unexpected exit status %d\n", WEXITSTATUS(r)); 
} 
... 
相關問題