fork() || fork() || fork() 与 fork() fork() fork()
先來看fork() || fork() || fork()
#include<stdio.h>
#include<unistd.h>
#include<assert.h>int main()
{fork() || fork() || fork();printf("A\n");
}
//這個輸出多少個A呢
首先主進(jìn)程?fork() || fork() || fork();?
最左邊的fork()給個返回值 這個返回值是子進(jìn)程的進(jìn)程ID 這個ID具體不重要? 反正大于零?
然后根據(jù)? "||" 這個的原則? 右邊兩個fork()不執(zhí)行?
到了第一個子進(jìn)程之后? 第一個fork()的返回值(也就是子進(jìn)程ID)是等于零的? ? 打印一個A
然后第二個子進(jìn)程? ?fork() || fork() || fork();? 執(zhí)行第二個fork()?,? 打印一個A
執(zhí)行之后? 到了第三個子進(jìn)程? ?第一個第二個fork()返回值都是零?
到?fork() || fork() || fork();?
這個fork()之后? ?三個fork()返回值都變成了0? 程序結(jié)束
再加上父進(jìn)程中的一個A
父進(jìn)程----->子進(jìn)程------->子進(jìn)程------>子進(jìn)程
所以總共打印四個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(); 要簡單些? 因為"&&"要想通過? 必須全部大于零??
相當(dāng)于主進(jìn)程一下復(fù)制了三份? 家伙是那個父進(jìn)程 總共四個進(jìn)程? 打印四個A
“&&”因為這個的特性? 所以到了子進(jìn)程中子進(jìn)程的進(jìn)程ID等于零? 所以子進(jìn)程不能再進(jìn)行復(fù)制了?
“圓規(guī)為什么能畫圓,因為心不動,腳在動;為什么你不能圓夢,因為心在動,腳不動”
總結(jié)
以上是生活随笔為你收集整理的fork() || fork() || fork() 与 fork() fork() fork()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。