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

标签 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;
}

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

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

我的问题是:为什么 $?n 的值不同?我还在 Win32 下测试了该程序,echo %errorlevel% 给出了与 n 相同的值。谢谢!

最佳答案

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

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

仔细阅读man systemman wait,你就会明白。

关于c - 为什么是$?调用 system() 后总是 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8613460/

相关文章:

C编程与输出混淆

c - 简单的 C 程序,它将读取行数并在用户输入 EOF 后终止

android - 频繁执行dumpsys对Android系统的影响

linux - GStreamer 帧率为10/1时,视频播放速度变快

linux - 如果我没有得到预期的整数值,我该如何终止我的脚本? - BASH shell 脚本

c - 指针之谜/菜鸟问题

c - 在C中制作函数树

c - 字符指针如何处理每个字节的MSB位?

php - 如何将html转换成一行字符串?

linux - 如何让 bash 脚本在使用 set -e 后不会因错误而退出?