對fork函式理解

2021-07-04 04:21:17 字數 1940 閱讀 1348

標頭檔案: #include 

pid_t fork (void);
1. 建立乙個子程序,失敗返回-1。

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

#include #include int main (void) 

if (pid == 0)

printf ("%u程序:我是%u程序的父程序。\n", getpid (), pid);

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

#include #include #include int global = 100;

int main (void)

if (pid == 0)

sleep (1);

printf ("父程序:%d %d %s\n", global, local, heap);

}

第一行輸出abcxyz,第二行輸出abc

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

#include #include int main (void) 

if (pid == 0)

sleep (1);

printf ("父程序:%d %d %d\n", a, b, c);

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

#include #include #include #include int main (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 cpp view plain copy pid t fork void 1.建立乙個子程序,失敗返回 1。2.呼叫一次,返回兩次。分別在父子程序中返回子程序的pid和0。利用返回值的不同,可以分別為父子程序編寫不同的處理分支。cpp view plain copy incl...

作業系統實驗 fork函式理解

一 fork 函式的作用開闢出一塊記憶體空間 二 父程序與子程序被複製的程序是父程序,複製出來的程序叫子程序 三 注意事項 1.父程序的程序號一定小於子程序 因為肯定先有了父程序,才會有子程序 2.父程序呼叫fork 函式的返回值是子程序號 3.子程序呼叫fork 函式的返回值是0 4.由2,3,可...

SetBkMode函式理解

輸出的字串時,發現存在背景色,這樣的輸出是破壞背景的。那需要使用什麼方法來保持背景不變,而又能輸出紅色的字串呢?比如按鈕的文字顏色是黑色的,而背景是灰色的。這就需要使用setbkmode函式來設定drawtext函式的輸出方式,顯示裝置共有兩種輸出方式 opaque和transparent。opaq...