Почему возврат из «system» не совпадает с возвращением вызванного скрипта? - PullRequest
5 голосов
/ 24 мая 2019

У меня есть простой сценарий

#!/usr/bin/bash
# exit5.bash
exit 5

И я вызываю его с помощью системы в программе переменного тока

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int ret = system("./exit5.bash");
    printf("%d\n", ret);
    return 0;
}

И я вижу на экране 1280, что совпадает с 5 << 8

Почему я не вижу обычные 5?

1 Ответ

5 голосов
/ 24 мая 2019

Возвращаемое значение system - это окончание статус , а не выход код .

См. Раздел возвращаемого значения man system:

В двух последних случаях возвращаемое значение представляет собой «состояние ожидания», которое можно проверить с помощью макросов, описанных в waitpid (2) . (то есть WIFEXITED(), WEXITSTATUS() и т. д.).

То, что вы ищете, возвращается макросом WEXITSTATUS:

WEXITSTATUS(wstatus)

возвращает статус выхода ребенка. Он состоит из наименее значащих 8 битов аргумента состояния, который дочерний элемент указал в вызове exit(3) или _exit(2) или в качестве аргумента для оператора возврата в main(). Этот макрос должен использоваться, только если WIFEXITED вернул true.

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