2015-10-27 34 views
4

Java代碼:Java的返回碼不正確記錄與C++系統()調用

public class Test { 
    public static void main (String[] args) { 
     System.exit (4); 
    } 
} 

C++代碼:

#include <stdio.h> 
#include <cstdlib> 

int main() { 
    int result = system ("java Test"); 
    printf ("Result: %d", result); 
} 

運行這個C++程序輸出

"Result: 1024" 

如果我直接運行java程序,並檢查返回狀態的值使用bash的$?變量,我得到4:

> java Test 
> echo $? 
4 

所以看來我誤解或濫用系統調用。

如何從system()調用中獲取「4」的返回值,而不是「1024」,以及「1024」是從哪裏來的?

謝謝!

+1

http://www.cplusplus.com/reference/cstdlib/system/ –

+1

從你的鏈接:「如果命令是不是一個空指針,返回的值取決於系統和庫實現,但它是如果支持,通常應該是被調用的命令返回的狀態碼。「 這就是我閱讀的內容,這讓我期待着我期待的行爲。我哪裏錯了? – JoshuaD

+1

_depends在系統和庫實現_檢查您的庫實現。 –

回答

2

您可以使用WEXITSTATUSsystem調用的結果獲取退出狀態。

#include <stdio.h> 
#include <cstdlib> 

int main() { 
    int result = system ("java Test"); 
    printf ("Result: %d", WEXITSTATUS(result)); 
} 
0

這些是正確的結果。 system()的返回值不是子進程的退出代碼,而是包含退出代碼的狀態代碼和其他幾個標誌。

欲瞭解更多信息,請參閱system()手冊頁,它指向您描述可用於處理來自system()的返回值的宏的waitpid()手冊頁。