fork 函式 fork 函式的使用

2021-10-17 09:29:43 字數 1012 閱讀 8489

fork的意思是個叉子,在unix及其衍生版linux中,用於建立子程序,現在看一下fork函式的基本用法。

#include#includeint main()

printf("%c", 'b');

fflush(stdout);

fork();

printf("%c", 'c');

fflush(stdout);

}

上圖的輸出是什麼呢?

答案是:babcccc或abcbccc,由於程序的排程,順序有所不同,但是每個字母的個數卻是一定的。

為什麼會輸出上述字母?

首先說一下fork()函式的基本概念吧,fork函式是乙個系統呼叫,說到系統呼叫,就是linux核心提供給上層應用使用的。fork函式的作用是建立乙個子程序,並且和父程序執行同樣的**。

這裡有個注意點,就是和父程序執行同樣的**。這樣用叉子來形容這個函式非常的恰當。從fork函式往後,兩個程序就分開了,然後執行同樣的**。

另外乙個注意點是fork函式的返回值,如果是父程序,返回值為子程序的pid,如果是子程序執行fork,則返回值為0,這樣就可以區分是父程序還是子程序了。

了解了上述fork函式的定義,我們就回歸到上述**。

首先主程序執行main函式,來到if(!fork),此刻開始建立子程序,並且兩個子程序執行同樣的後續**。

父程序:父程序執行if(!fork)判斷,條件不成立,則略過列印a的**段,輸出b,然後繼續往後執行,遇到fork,父程序和子程序同時執行後續**,也就是父程序輸出c,子程序輸出c。

子程序:子程序執行if(!fork)判斷,條件成立,輸出a,然後執行b,然後繼續執行到fork,建立子程序,和主程序執行一樣的**,也就是主程序輸出c,子程序輸出c。

由於排程原因,子程序,父程序排程順序不停,所以串行不通,但是各個字母的個數是確定的。

bccabcc

c 中的fork函式 FORK()函式

乙個程序,包括 資料和分配給程序的資源。fork 函式通過系統呼叫建立乙個與原來程序幾乎完全相同的程序,也就是兩個程序可以做完全相同的事,但如果初始引數或者傳入的變數不同,兩個程序也可以做不同的事。乙個程序呼叫fork 函式後,系統先給新的程序分配資源,例如儲存資料和 的空間。然後把原來的程序的所有...

fork函式 exec函式

fork 會產生乙個和父程序完全相同的子程序,出於效率考慮,linux中引入了 寫時複製 技術,也就是只有程序空間的各段的內容要發生變化時,才會將父程序的內容複製乙份給子程序。在fork之後exec之前兩個程序用的是相同的物理空間 記憶體區 子程序的 段 資料段 堆疊都是指向父程序的物理空間,也就是...

fork 函式函式總結

學習作業系統程序時遇到用fork建立子程序,一下所寫均是個人結合網上一些資料和個人思考所得,歡迎拍磚!程序建立的原因 導致程序建立的一般有事件有 1新的批處理作業 2互動登陸 終端使用者登陸到系統 3作業系統因為提供一項服務而建立 4由現有的程序派生。注 作業系統為另乙個程序的顯示請求建立乙個程序時...