分類:
專業學習
#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...