как преобразовать целое число в возвращаемое значение процесса, чтобы использовать его в WEXITSTATUS на C

#c #linux #bash #unix

#c #linux #bash #unix

Вопрос:

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

например: у меня есть число 258, я хочу выполнить некоторое битовое смещение, затем использовать WEXITSTATUS, чтобы получить 258, это похоже на то, что я хочу знать число, которое дает 258, когда я использую WEXITSTATUS.

Спасибо!

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

1. 258 не помещается в один байт.

2. Для POSIX доступны только младшие 8 бит любого возвращаемого значения. 258 не поместится в 8 бит, поэтому нет числа, которое может произвести 258. POSIX говорит: «Обратите внимание, что эти 8 бит являются частью полного значения , которое используется для установки si_status элемента siginfo_t структуры, предоставляемой waitid() «, поэтому waitid() предполагается , что оно возвращает полное int значение, возвращаемое при выходе из процесса, но я уверен, что Linux здесь сломан и возвращает только младшие 8 бит.

3. @stark: О, дети. Раньше у нас были большие байты, которые могли содержать 258. Фактически, стандарт C все еще допускает это. Почему вы позволяете производителям уходить с рук, предоставляя вам меньшие байты? Вы должны протестовать.

4. @EricPostpischil байты должны быть достаточно большими, чтобы вместить любое число!!! Это мое требование.

5. @stark Шестидесятые были интересным временем.