請問下面的程序一共輸出多少個“-”?

題目:

int main(void)
{    
int i;    
for (i = 0; i < 2; i++) 
{         
fork();         
printf("-");     
}     
return 0; 



A、2
B、4
C、6
D、8


答案:D


解析:

fork函數是計算機程序設計中的分叉函數。返回值: 若成功調用一次則返回兩個值,子進程返回0,父進程返回子進程標記;否則,出錯返回-1。


  fork函數將運行着的程序分成2個(幾乎)完全一樣的進程,每個進程都啓動一個從代碼的同一位置開始執行的線程。這兩個進程中的線程繼續執行,就像是兩個用戶同時啓動了該應用程序的兩個副本。
  函數原型
  pid_t fork( void);
  (pid_t 是一個宏定義,其實質是int 被定義在#include<sys/types.h>中)
  返回值: 若成功調用一次則返回兩個值,子進程返回0,父進程返回子進程ID;否則,出錯返回-1
  函數說明
  一個現有進程可以調用fork函數創建一個新進程。由fork創建的新進程被稱爲子進程(child process)。fork函數被調用一次但返回兩次。兩次返回的唯一區別是子進程中返回0值而父進程中返回子進程ID。
  子進程是父進程的副本,它將獲得父進程數據空間、堆、棧等資源的副本。注意,子進程持有的是上述存儲空間的“副本”,這意味着父子進程間不共享這些存儲空間。
在fork()的調用處,整個父進程空間會原模原樣地複製到子進程中,包括指令,變量值,程序調用棧,環境變量,緩衝區,等等。
因爲printf()函數存在緩衝,即當i = 0時,fork()之後相當於緩衝區內有兩個‘-’再fork()先賦值父進程緩衝區再輸出‘-’即總共2+2+2+2=8個‘-’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章