为什么此输出代码的输出不同?

时间:2016-08-26 17:02:31

标签: c operating-system fork system-calls

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

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(这与我链接的答案不一致)。我试过在互联网上寻找解释,但我似乎无法找到答案。如果有人能解释这里发生的事情,真的会有所帮助。

1 个答案:

答案 0 :(得分:1)

wait()系统调用在wait()返回的值中放入的不仅仅是子进程的返回值。实际上只有低8位是返回值,高位是状态标志,其中指示子进程如何退出(例如通过信号)。要从孩子那里获得返回值:

val = WEXITSTATUS(val);
在wait()之后立即