參考:http://www.cnblogs.com/guoqiaojin/archive/2012/08/24/2653609.html
asic (阿塞克) 於Mon Jul 16 12:48:46 2012)提到:int main() {printf("hello ");fork();printf("world\n");}執行結果是列印了兩行 hello world和我之前所理解的不一樣,我理解的是父進程執行到fork()函數才產生子進程,這樣的話應該是列印一個hello和兩個world 求版內大神科普下,拜謝!OP07 (【EE07】打雷『齊魯』) 於Mon Jul 16 13:44:27 2012)提到:這個問題出在printf他是有資料緩衝區的,不加\n資料不重新整理fork()建立子進程時,子進程複製了父進程的資料區段和堆棧段包括printf的資料緩衝區也被複製再執行後面的printf列印重新整理當然就是兩遍hello world了要是改成printf("hello \n");就一遍hello兩遍world了asic (阿塞克) 於Mon Jul 16 14:40:51 2012)提到:豁然開朗,多謝大神!asic (阿塞克) 於Mon Jul 16 14:53:33 2012)提到:試了一下,果然是這樣的另外把程式改成下面這樣,列印的兩句果真都是父進程的PIDint main() {printf("hello:pid=%d",getpid());fork();printf("world\n");}chuan92 (數星河) 於Mon Jul 16 15:39:58 2012)提到:學習了,以前只知道fflush(stdout),原來\n也可以。oinil (Raison d'être) 於Mon Jul 16 18:03:59 2012)提到:頂!學習了bsidb (淡藍天際的星光) 於Mon Jul 16 19:29:56 2012)提到:學習之~~原來理論和實際還是有距離的~NotYou (【姑蘇】陸草純) 於Mon Jul 16 20:26:19 2012)提到:就是這樣,以前類似問題向jyy大神請教過,bankq (Ripa) 於Mon Jul 16 22:32:29 2012)提到:原來\n會重新整理,學習了!mutalisk (mutalisk) 於Wed Jul 18 20:15:15 2012)提到:預設終端是行緩衝的 檔案是全緩衝的分行符號會重新整理終端,但是檔案不會