为什么是$?调用system()后总是0?

wds*_*xsj 5 c linux

我在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;
}
Run Code Online (Sandbox Code Playgroud)

无论输入命令行的是什么,echo $?总是打印0,例如:

$ ./foo anything
sh: anything: not found
32512
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么不$?采取相同的价值n?我也测试了Win32下的程序,并echo %errorlevel%给出了相同的值n.谢谢!

Emp*_*ian 6

如果n以八进制或十六进制打印,您将发现它的低字节始终为0.

如果您return WEXITSTATUS(n);,您的程序将以您期望的状态退出.

阅读man systemman wait认真,你就会明白.