2011-12-23 4 views
5

// foo.c 
#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char* argv[]) 
{ 
    int n = system(argv[1]); 
    printf("%d\n", n); 
    return n; 
} 

どんなにコマンドラインに供給されているもの、echo $?は常に例えば、0を出力しない:

$ ./foo anything 
sh: anything: not found 
32512 
$ echo $? 
0 

私の質問は:なぜ$?nと同じ値になりませんか?また、Win32でプログラムをテストしたところ、echo %errorlevel%nと同じ値を示します。ありがとう!

+0

を参照して、終了ステータスとして認識され、 'システム()'関与しているときにのみ動作を再現することができますか? (負の値が返されていますか?それはLinuxで定義されていますか?) –

+0

この現象は 'system()'でしか見られませんでした。 '。/ anything'の後に' echo $? 'を実行すると、出力は127になります。 – wdscxsj

答えて

6

あなたが進または進でnを印刷する場合return WEXITSTATUS(n);場合、あなたはそれの下位バイトは常に0

であることを発見するでしょう、あなたのプログラムは、あなたが期待している状態で終了します。

慎重にman systemman waitとお読みください。終了ステータスは、マクロWEXITSTATUSで計算されるため、戻り値の

+0

exit()にnを渡すこともできます。すなわち、 'exit(n);' –

+0

ありがとう!今私はそれを理解する。 – wdscxsj

+1

@MarkTurnerいいえ、できません。 'main()'からの 'return n;'は、 'main'が返った直後に(ほぼ)' exit(n) 'になります。そして、* $は '0'になります。 –

2

だけ下位8ビットは、SUSv4

+0

私はビット8〜15を意味すると思いますか? – wdscxsj

+0

あなたはそれをどう思いますか? – wRAR

+0

申し訳ありませんが、私は間違っていました。ありがとう。 – wdscxsj

関連する問題