gpt4 book ai didi

c - 为什么此代码片段的输出有所不同?

转载 作者:行者123 更新时间:2023-11-30 19:11:46 25 4
gpt4 key购买 nike

我最近开始了操作系统类(class)。我遇到了这个问题,我需要弄清楚输出是什么。这是代码 -

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 (这与我链接的答案不符)。我尝试在互联网上寻找解释,但似乎找不到答案。如果有人能解释这里发生的事情,那将非常有帮助。

最佳答案

wait() 系统调用不仅仅将子进程的返回值放入 wait() 的返回值中。事实上,只有低 8 位是返回值,高位是状态标志,指示子进程如何退出(例如通过信号)。要从子级获取返回值,请使用:

val = WEXITSTATUS(val);

紧接在 wait() 之后。

关于c - 为什么此代码片段的输出有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39171352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com