2011-12-23 5 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

를 참조 종료 상태로 인식하고 '시스템()'관련된 경우에만 동작을 재현 할 수 있습니까? (음의 값이 반환 되는가? 리눅스에서 정의 된 것인가?) –

+0

나는이 동작을'system()'으로 만 보았습니다. './anything' 다음에'echo $? '를 실행하면 출력은 127이됩니다. – wdscxsj

답변

6

당신이 진수 또는 16 진수로 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

관련 문제