Захват и отображение возвращаемого значения из вызова системы C () - PullRequest
0 голосов
/ 17 сентября 2011

Я на 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 Ответ

3 голосов
/ 17 сентября 2011

Значение, возвращаемое 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 раз .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...