Почему эта функция выхода добавляет два нуля в конце в C? - PullRequest
0 голосов
/ 20 ноября 2018

Эй, я сделал программу для университета в Си, и ребенок должен выйти с гекс 0xAA, но он также добавляет два нуля в конце? Почему это так? Я что-то наблюдаю?

pid_t cpid;
int status;
cpid = fork();
if (cpid==-1){
    return -1;
}
else if(cpid==0){
    pid_t pid_child = getpid();
    pid_t ppid_child = getppid();
    printf("ChildProcessID from Child: %d\n",pid_child);
    printf("ParentProcessID from Child: %d\n",ppid_child);
    exit(0xAA);
}
else{
    printf("ChildProcessID: %d\n",cpid);
    wait(&status);
    printf("Exit Status Child: %#X\n",status);
}

в конце, где он должен вывести

Exit Status Child: 0XAA

выдает

Exit Status Child: 0XAA00

Извините, если что-то отформатировано неправильно или что-то забыли. Это мой первый пост здесь. Заранее спасибо.

1 Ответ

0 голосов
/ 20 ноября 2018

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

Есть макросы, которые вы можете использовать для извлечения соответствующих частей:

wait(&status);
if (WIFEXITED(status)) {
    printf("Exit Status Child: %#X\n",WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
    printf("Child exited abnormally via signal %d\n", WTERMSIG(status));
} else {
    printf("Something else happened\n");
}
...