документация glibc и порядковый номер

#linux #unix #endianness #glibc #systems-programming

#linux #unix #порядковый номер #glibc #системы-программирование

Вопрос:

в документации glibc о статусе завершения процесса указано, что макрос WEXITSTATUS возвращает младший порядок 8 байт статуса завершения.

Макрос: int WEXITSTATUS (состояние ввода)

Если значение статуса WIFEXITED равно true, этот макрос возвращает младшие 8 бит значения статуса завершения дочернего процесса.

Однако /usr/include/sys/wait.h говорится:

 # define WEXITSTATUS(status)    __WEXITSTATUS (__WAIT_INT (status))
  

И, /usr/include/bits/waitstatus.h упоминает:

 /* If WIFEXITED(STATUS), the low-order 8 bits of the status.  */
#define __WEXITSTATUS(status)   (((status) amp; 0xff00) >> 8)
  

Если только все мои концепции порядкового номера не перепутались, как это младшие 8 бит? Или libc предполагает, что данные хранятся в формате малого порядка?

Ответ №1:

Это не проблема с порядковым номером. Порядковый номер относится к тому, как данные хранятся в памяти; на машине с большим или меньшим порядковым номером (((status) amp; 0xff00) >> 8) извлекаются биты с 15 по 8, то есть с 8-го по 15-й младшие биты status аргумента макроса.

Документация и комментарии сбивают с толку, потому что статус относится к двум разным вещам.

Завершающийся процесс возвращает код состояния. Это состояние выхода имеет тип int в исходном коде (либо как возвращаемое значение из main , либо как аргумент exit ), однако значение должно быть в диапазоне от 0 до 255.

Системные вызовы wait и waitpid также обеспечивают status обратную связь с вызывающей стороной. Этот статус отличается; 8 бит младшего порядка исходного статуса завершения теперь находятся в битах с 15 по 8. Я предполагаю, что в документации говорится, что WEXITSTATUS возвращает «8 бит младшего порядка», потому что это была упаковка статуса выхода с точки зрения завершающегося процесса.

Комментарии:

1. В документации указано «8 бит младшего порядка», потому что, хотя дочерний процесс может иметь любое int возвращаемое значение, в среде Posix родительскому процессу возвращаются только 8 бит этого статуса с наименьшим значением. pubs.opengroup.org/onlinepubs/009695399/functions/_exit.html