Команда WEXITSTATUS

Я пытаюсь понять, что делает следующий код:

int main()
    {
    int value = 3;
    if (fork() != 0)
    {
        wait(&value);
    }
    else
    {
        exit(value);
    }
    value = WEXITSTATUS(value);
    value++;
    printf("%d", value);
    return value;
}

Я знаю, что это создает процесс для одного сына, это также говорит отцу, что процесс должен ждать успеха сына. и приказывает процессу сына выйти с exit (3). когда я отлаживал свой ответ, я увидел, что команда: wait (& value) в строке 6 возвращает 3 * 256, но я прочитал, что предполагается, что он должен вернуть 8 младших бит значения статуса выхода из дочернего процесса, что означает, что он может не должно быть выше 255. это не меняет моего вывода 4, то есть статуса выхода плюс 1, но мне все еще интересно, где и почему я получаю это 256. Может кто-нибудь объяснить, что мне не хватает или не понимаю полностью? Большое спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
237
1

Ответы 1

Источник вашего замешательства в том, что вы имеете дело со службами операционной системы, которые были плохо спроектированы.,

Вам нужно посмотреть документацию на функцию wait ():

http://pubs.opengroup.org/onlinepubs/009695399/functions/wait.html

Случилось так, что эта функция, созданная случайно, запихнула множество вещей в один возвращаемый параметр. Существует ряд макросов, которые распаковывают это возвращаемое значение на отдельные компоненты, расширяя битовые поля.

Причина, по которой вы получаете 3 * 256, а не 3, заключается в том, что функция должна освободить место для статуса выхода процесса, который, по-видимому, равен 0. Вы получаете двоичное значение:

0000 0000 0000 0000 0000 0011 0000 0000
|UNUSED           |
                    |Process 
                     Return 
                     Value  | | Other Stuff |

Другие вопросы по теме