我最近开始了一个关于操作系统的课程。我遇到了这个问题,我需要弄清楚输出是什么。这是代码 -
int main() {
int val = 5;
if(fork()) {
wait(&val);
}
val++;
printf("%d ", val);
return val;
}
在此帖之前已经回答了这个问题 - Explain this code's working; how the child process returns values and where?
我理解返回值如何从子进程返回到val,然后在父进程中递增并打印,并且根据该逻辑的输出实际上应该是6 7
但是当我自己尝试执行代码时,我似乎得到了完全不同的东西。我得到一个输出6 1537.如果我删除增量,我得到输出 - 6 1280
这意味着返回的值是val * 256而不仅仅是val(这与我链接的答案不一致)。我试过在互联网上寻找解释,但我似乎无法找到答案。如果有人能解释这里发生的事情,真的会有所帮助。
答案 0 :(得分:1)
wait()系统调用在wait()返回的值中放入的不仅仅是子进程的返回值。实际上只有低8位是返回值,高位是状态标志,其中指示子进程如何退出(例如通过信号)。要从孩子那里获得返回值:
val = WEXITSTATUS(val);
在wait()之后立即。