Подтвердить что ты не робот

Что возвращает WEXITSTATUS (статус)?

Я пытаюсь понять, как работает WEXITSTATUS(status). Я столкнулся с фрагментом кода, в который добавляется возвращаемое значение WEXITSTATUS(status) к переменной.

Вот фрагмент:

waitpid(-1, &status, 0);
counter += WEXITSTATUS(status);

Как можно вычислить возвращаемое значение WEXITSTATUS?

4b9b3361

Ответ 1

WEXITSTATUS(stat_val) - это макрос (поэтому на самом деле он не "возвращает" что-то, а "оценивает" что-то).

Чтобы узнать, как это работает, вы можете посмотреть его в заголовках (которые должны быть #include d via <sys/wait.h>), которые поставляются с используемым вами C-компилятором.

Реализация этого макроса может отличаться в зависимости от C-компилятора.

Обратите внимание, что этот макрос дает нормальное значение, только если макрос WIFEXITED(stat_val) дал вам значение, не равное 0.

Дословно из waitpid() спецификации POSIX:

WEXITSTATUS(stat_val)

Если значение WIFEXITED (stat_val) не равно нулю, этот макрос оценивается как младшие 8 битов аргумента состояния, которые дочерний процесс передал в _exit() или exit(), или значение дочернего процесса вернулся из               Основной().


Мотивация добавления кода возврата (ов?) Конкретной программы известна только автору кода и, возможно, существующей документации.

Ответ 2

WEXITSTATUS() - это макрос, который извлекает и возвращает статус выхода ребенка.

#include <sys/wait.h>

    int statval, exstat; 
    pid_t pid;

    pid = wait(&statval);
    exstat = WEXITSTATUS(statval);

выше - пример того, что возвращается.