Почему нужен WEXITSTATUS?
Следующий код будет ждать завершения дочернего процесса и затем распечатать его код возврата.
int status;
wait(&status);
cout << "return code = " << WEXITSTATUS(status) << endl;
Почему код возврата не может быть сохранен в переменной int? Почему его нужно преобразовать с помощью функции WEXITSTATUS? Что представляет значение переменной без преобразования?
Ответы
Ответ 1
int
содержит не только код выхода - он также хранит информацию о том, как завершился процесс, например, если он был сигнализирован (WIFSIGNALED
), или если был вызван exit()
(WIFEXITED
) и т.д..
Макросы W
используются для извлечения различных фрагментов информации из int
.
Ответ 2
status
содержит не только возвращаемое значение процесса, но также и почему возвращен вызов wait(2,3p)
(что не всегда может быть нормальным выходом из процесса). Различные макросы W*()
используются для разбиения возвращаемого значения на его составные части.