gpt4 book ai didi

c - 解释涉及 fork() 的 C 程序的输出

转载 作者:太空狗 更新时间:2023-10-29 15:20:20 27 4
gpt4 key购买 nike

运行这个程序会打印“forked!” 7次。有人可以解释如何“ fork !”正在打印 7 次?

#include<stdio.h>
#include<unistd.h>

int main(){

fork() && fork() || fork() && fork();

printf("forked!\n");

return 0;
}

最佳答案

这里使用了几个概念,第一个是了解 fork 做什么以及它在某些情况下返回什么。很快,当它被调用时,它会创建一个调用者的重复进程,并在子进程中返回 0(逻辑表达式为 false)和非零值(true 用于逻辑表达式)用于父进程。实际上,如果出现错误,它可能会返回负(非零)值,但这里我们假设它总是成功。

第二个概念是逻辑表达式的短路计算,例如&&||,具体来说,0 && fork() 不会调用fork(),因为如果第一个操作数是false(零),那么就不需要计算第二个。同样,1 || fork() 也不会调用 fork()

另请注意,在子进程中,表达式的计算在与父进程相同的点继续进行。

另外,请注意,由于优先级的原因,表达式按以下顺序计算:

(fork() && fork()) || (fork() && fork())

这些观察应该会引导您找到正确的答案。

考虑 fork() && fork() 的简化示例

   fork()        
/ \
false true && fork()
/ \
false true

所以这里我们创建了三个进程,其中两个返回 false 作为结果,一个返回 true。然后对于 || 我们让所有返回 false 的进程尝试再次运行相同的语句,所以我们有 2 * 3 + 1 = 7作为答案。

关于c - 解释涉及 fork() 的 C 程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139178/

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