我在Linux下测试这个小程序:
// 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
我的问题是:为什么$?
与[{1}}的价值相同?我还在Win32下测试了该程序,n
给出了与echo %errorlevel%
相同的值。谢谢!
答案 0 :(得分:6)
如果以八进制或十六进制打印n
,您将发现它的低字节始终为0.
如果您return WEXITSTATUS(n);
,您的程序将以您期望的状态退出。
仔细阅读man system
和man wait
,您就会理解。
答案 1 :(得分:2)
只有低8位的返回值被识别为退出状态,因为退出状态是由WEXITSTATUS
宏计算的,请参阅SUSv4