對fork 函式的理解

2021-07-04 04:34:04 字數 2612 閱讀 4865

標頭檔案: #include 

[cpp]view plain

copy

pid_t fork (

void

);  

1. 建立乙個子程序,失敗返回-1。

2. 呼叫一次,返回兩次。分別在父子程序中返回子程序的pid和0。利用返回值的不同,可以分別為父子程序編寫不同的處理分支。

[cpp]view plain

copy

#include 

#include 

intmain (

void

)   

if(pid == 0)   

printf ("%u程序:我是%u程序的父程序。\n"

3. 子程序是父程序的副本,子程序獲得父程序資料段和堆疊段(包括i/o流緩衝區)的拷貝,但子程序共享父程序的**段。

[cpp]view plain

copy

#include 

#include 

#include 

intglobal = 100;  

intmain (

void

)   

if(pid == 0)   

sleep (1);  

printf ("父程序:%d %d %s\n"

4. 函式呼叫後父子程序各自繼續執行,其先後順序不確定。某些實現可以保證子程序先被排程。

[cpp]view plain

copy

#include 

#include 

intmain (

void

)   

if(pid == 0)   

sleep (1);  

printf ("父程序:%d %d %d\n"

5. 函式呼叫後,  父程序的檔案描述符表(程序級)也會被複製到子程序中,二者共享同乙個檔案表(核心級)。

[cpp]view plain

copy

#include 

#include 

#include 

#include 

intmain (

void

)   

const

char

* text = 

"hello, world !"

;  if

(write (fd, text, strlen (text) * 

sizeof

(text[0])) == -1)   

pid_t pid = fork ();  

if(pid == -1)   

if(pid == 0)   

close (fd);  

return

0;  

}  sleep (1);  

text = "linux"

;  if

(write (fd, text, strlen (text) * 

sizeof

(text[0])) == -1)   

close (fd);  

return

0;  

}  

結果:hello ,linux !

6. 總程序數或實際使用者id所擁有的程序數, 超過系統限制,該函式將失敗。

7. 乙個程序如果希望建立自己的副本並執行同乙份**,或希望與另乙個程式併發地執行,都可以使用該函式。

注意:fork之前的**只有父程序執行,fork之後的**父子程序都有機會執行, 受**邏輯的控制而進入不同分支。

對fork函式理解

標頭檔案 include pid t fork void 1.建立乙個子程序,失敗返回 1。2.呼叫一次,返回兩次。分別在父子程序中返回子程序的pid和0。利用返回值的不同,可以分別為父子程序編寫不同的處理分支。include include int main void if pid 0 print...

fork 函式 自己的理解

大家都知道fork 函式生成和原程序完全相同的子程序。父程序返回子程序的pid,子程序返回0.同時要注意一點fork 不象執行緒需提供乙個函式做為入口,fork 後,子程序的入口就在 fork 的下一條語句。因此如下函式 我見過的一道筆試題 void func 問題是呼叫此函式,會列印多少 注意子程...

fork 函式 fork 函式的使用

fork的意思是個叉子,在unix及其衍生版linux中,用於建立子程序,現在看一下fork函式的基本用法。include includeint main printf c b fflush stdout fork printf c c fflush stdout 上圖的輸出是什麼呢?答案是 bab...