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