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

这篇博客探讨了在Linux中使用逻辑运算符`||`和`&&`与`fork()`函数结合的情况。在`fork() || fork() || fork()`中,由于`||`的短路特性,最终只会产生四个进程并打印四个A。而在`fork() && fork() && fork()`中,由于`&&`要求所有条件都为真,会产生三个子进程,总共四个进程,同样打印四个A。文章以圆规画圆的比喻,强调了在`fork()`调用中保持逻辑一致的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看fork() || fork() || fork()

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

int main()
{
    fork() || fork() || fork();
    printf("A\n");
}
//这个输出多少个A呢

首先主进程 fork() || fork() || fork(); 

最左边的fork()给个返回值 这个返回值是子进程的进程ID 这个ID具体不重要  反正大于零 

然后根据  "||" 这个的原则  右边两个fork()不执行 

到了第一个子进程之后  第一个fork()的返回值(也就是子进程ID)是等于零的    打印一个A

然后第二个子进程   fork() || fork() || fork();  执行第二个fork() ,  打印一个A

执行之后  到了第三个子进程   第一个第二个fork()返回值都是零 

到 fork() || fork() || fork()

这个fork()之后   三个fork()返回值都变成了0  程序结束

再加上父进程中的一个A

父进程----->子进程------->子进程------>子进程

所以总共打印四个A

再来看这个: fork() && fork() && fork()

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

int main()
{
    fork() && fork() && fork();
    printf("A\n");
}
//这个输出多少个A呢

这个其实比fork() || fork() || fork(); 要简单些  因为"&&"要想通过  必须全部大于零  

相当于主进程一下复制了三份  家伙是那个父进程 总共四个进程  打印四个A

“&&”因为这个的特性  所以到了子进程中子进程的进程ID等于零  所以子进程不能再进行复制了 

“圆规为什么能画圆,因为心不动,脚在动;为什么你不能圆梦,因为心在动,脚不动”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值