我最近开始了有关操作系统的课程。我遇到了这个问题,我需要弄清楚输出是什么。这是代码-

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()之后立即使用。

10-05 22:06
查看更多