天天看點

關于fork()函數需要注意的地方

1.關于fork()的描述

關于fork()函數需要注意的地方

 fork通過複制調用程序建立一個新程序,則這個新程序就叫做子程序,被調用的程序叫做父程序。子程序與父程序在不同的記憶體空間中運作。在調用fork()函數時,兩個記憶體空間具有相同内容。其中一個程序執行的記憶體寫、檔案映射對另一個程序沒有影響。

2.關于fork()傳回值

關于fork()函數需要注意的地方

 當成功調用fork()時,在父程序中傳回子程序的PID,且傳回值為0.調用失敗時,傳回值為-1。如果沒有建立新程序時,系統會傳回一個非負整數。

3.代碼程式設計執行個體

關于fork()函數需要注意的地方

 編譯運作結果如下:

關于fork()函數需要注意的地方

 由運作結果可以看出,調用fork()函數後,在fork()之後的代碼執行第一次時,fork()傳回值即retpid=7080把值賦給父程序。執行第二次時,父程序建立子程序,retpid=0把值賦給子程序,而此時子程序的pid剛好等于fork()賦給父程序的傳回值即retpid=7080。

4.對fork()的總結

關于fork()函數需要注意的地方

 通過簡單的代碼模拟伺服器接收用戶端發送的連結請求,進而建立新的程序。其運作結果如下:

關于fork()函數需要注意的地方

 子程序與父程序是互不影響的,同時在調用fork()後,linux存在兩種拷貝。第一種是全拷貝,包括堆、棧、檔案、I/O流,資料等等;第二種則是寫時拷貝(Copy On Write)即COW,例如當子程序沒有對程式中的初始化資料進行修改時,代碼中所有的資料均是父、子程序所共有的;反之,子程序則會去拷貝父程序的中那個修改的資料。

這是個人對fork()學習的了解,也是提醒自己在學習這部分内容需要注意的地方,希望對你有幫助。

繼續閱讀