从C系统调用中捕获并显示返回值()

时间:2011-09-16 20:14:09

标签: c linux

我在ubuntu linux 10.04上 我有以下

#simplec.c  
#include "stdio.h"

int main()
{

    printf("Hello World\n");
    system("ps -H");
    return 12;


}

#callsimplec.c
#include "stdio.h"

int main()
{

    int ret =0;
    ret = system("./simplec");
    printf("In callsimplec ret is %d\n", ret);

}

当我这样做时

gcc callsimplec.c -o callsimplec
gcc simplec.c -o simplec
./callsimplec

我明白了:

Hello World
  PID TTY          TIME CMD
27238 pts/2    00:00:00 bash
28066 pts/2    00:00:00   callsimplec
28067 pts/2    00:00:00     simplec
28068 pts/2    00:00:00       ps
In callsimplec ret is 3072

所以我发现3072是打印的,因为256次12是3072.无论我在simplec.c中使用什么返回值,我得到的值乘以256作为打印输出。这是为什么?我只想弄清楚它。

1 个答案:

答案 0 :(得分:3)

system返回的值应与宏一起使用:WEXITED,WIFEXITSTATUS等。

system(以及wait系列)返回的值,根据具体情况而定:

  • 正常终止:

    15 ............. 8 ............. 0
        exit status         0x00
    
  • 被信号杀死:

    15 ............. 8 7............ 0
          unused        killer signal
    
  • 信号停止

    15 ............. 8 ............. 0
        stop signal         0x7f
    
  • 继续信号

    15 ............................. 0
                   0xFFF
    

因此,在您的情况下,流程正常退出,系统返回12移位8次