【发布时间】:2017-01-03 10:11:43
【问题描述】:
我最近开始学习操作系统课程。我遇到了这个问题,我需要弄清楚输出是什么。这是代码 -
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
但是当我尝试自己执行代码时,我似乎得到了完全不同的东西。我得到一个输出 6 1537。如果我删除增量,我得到输出 - 6 1280
这意味着返回的值是 val*256 而不仅仅是 val(这与我链接的答案不符)。我曾尝试在互联网上寻找解释,但似乎找不到答案。如果有人能解释这里发生的事情,那真的很有帮助。
【问题讨论】:
-
您的代码缩进与实际情况不同。
-
您似乎缺少一个右大括号(或有一个太多的左大括号)。
-
是的,我忘记在此处添加右括号。
-
另请参阅:Exit codes bigger than 255 — possible?,对于 POSIX 系统,
exit()和waitpid(),以及我的 cmets 1 和 2。
标签: c operating-system fork system-calls