Я пытаюсь понять, что делает следующий код:
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. Может кто-нибудь объяснить, что мне не хватает или не понимаю полностью? Большое спасибо!





Источник вашего замешательства в том, что вы имеете дело со службами операционной системы, которые были плохо спроектированы.,
Вам нужно посмотреть документацию на функцию 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 |