linux fork 函式學習

2021-04-13 02:50:32 字數 1622 閱讀 1556

分類:

專業學習

#include

#include

#include

int main()

case 0:

default:

} printf("n=[%d]/n", n++);

return 0; }

輸出結果1

fork!

[child]i am child!

[parent]i am parent!

[parent]getpid=[4496]

[parent]pid=[4497]

n=[0]

[child]getpid=[4497]

[child]pid=[0]

n=[0]

輸出結果2

fork![child]i am child!

[child]getpid=[4794]

fork![parent]i am parent!

[parent]getpid=[4793]

[parent]pid=[4794]

n=[0]

[child]pid=[0]

n=[0]

如果fork成功,子程序中fork的返回值是0,父程序中fork的返回值是子程序的程序號,getpid()返回的才是各自真是的程序號。

printf("fork!");//print 一次;   這裡會print 2次

如果將 printf("fork!") 換成 printf("fork!/n")   那麼就是只列印一次了.

主要的區別是因為有了乙個 /n  回車符號

這就跟printf的緩衝機制有關了,printf某些內容時,作業系統僅僅是把該內容放到了stdout的緩衝佇列裡了,並沒有實際的寫到螢幕上

但是,只要看到有 /n 則會立即重新整理stdout,因此就馬上能夠列印了.

執行了printf("

fork!

") 後,

fork!

僅僅被放到了緩衝裡,再執行到fork時,緩衝裡面的

fork!

被子程序繼承了

因此在子進程度stdout緩衝裡面就也有了

fork!

. 所以,你最終看到的會是

fork!

被printf了2次!!!!

而執行 printf("

fork!/n

")後,

fork!

被立即列印到了螢幕上,之後fork到的子程序裡的stdout緩衝裡不會有 aaaaaa 內容

因此你看到的結果會是 aaaaaa 被printf了1次!!!! 

linux fork函式學習

在編寫socket ftp之前,我對fork函式進行了學習。先看這段範例 include include main 這段 寫了乙個使用fork函式建立子程序,父子程序同時執行而產生交錯的,不一樣的執行結果。執行結果如下 a.out i am the child process,my process ...

linux fork函式與vfork函式

一 fork 1.呼叫方法 include include pid t fork void 正確返回 在父程序中返回子程序的程序號,在子程序中返回0 錯誤返回 1 子程序是父程序的乙個拷貝。即,子程序從父程序得到了資料段和堆疊段的拷貝,這些需要分配新的記憶體 而對於唯讀的 段,通常使用共享記憶體的方...

linux fork函式的精闢解說

開始演示 plain view plaincopyprint?root test code cat fork.c include include include main root test code gcc fork.c o fork root test code fork i am the ch...