c - Linux进程中return语句的真实故事

标签 c linux process operating-system

我正在尝试配置这个简单代码的输出。但我无法理解。 预期输出是

int main() 
{ 
     int val = 5; 
     if(fork()) 
         wait(&val); 
     val++; 
     printf("%d\n", val); 
     return val; 
}

预期输出为

6
7

但是 Linux 给了我

6
1537

请谁能告诉我这段代码背后发生了什么。 我可以预测 return 语句一定有问题。 感谢详细解释。

最佳答案

您唯一要做的就是更改函数wait()的参数值。

int main() 
{ 
     int val = 5; 
     if(fork()) 
         wait(NULL); 
     val++; 
     printf("%d\n", val); 
     return val; 
}

您的输出为1537,因为 status() 函数更改了您的变量值。

wait() 的 man 摘录,其中 status 代表函数的参数。

If status is not NULL, wait() and waitpid() store status information in the int to which it points.

祝你好运。

关于c - Linux进程中return语句的真实故事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29850974/

相关文章:

linux - 无法在 Linux 上使用绝对路径创建 Docker 卷

c++ - 调用外部脚本时的奇怪行为

c++ - 检查进程是否存在

unix - 错误: Unbound module Unix in Ocaml

c - 将 C 预处理器翻译成 Rust

c - 从 R 矩阵读取/写入 C 数组

c - 汇编函数 FPU with c

c - Turbo C 数组问题

linux - 在 Debian 8 上将 TeamSpeak3 作为服务运行

c - 在 2 个 C 程序之间传输数据的最简单方法?