[問題] fork的問題

看板C_and_CPP (C/C++)作者時間15年前 (2009/03/29 20:57), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串2/2 (看更多)
作者 loter ( Maple leaf) 看板 IM100HW 標題 Re: [嘖嘖] fork陰我 時間 Sun Mar 29 21:14:15 2009 ─────────────────────────────────────── 並不是 fork 陰你,是因為你沒有先 flush parent process's stdout buffer 的關係, 所以是你下面每一個 fork 出來的 child process 中自己的 buffer,都還會帶有 "fork" 這個字串,在 printf("%d ",n); 時然後再加上 n 的值,所以你會以為 child process 起始位置有誤,實際上還是從 fork(); 以後開始執行, 解決方法就是把第一次 printf 改成 printf("fork\n"); 就ok了。 作者: Domos (Domos) 看板: C_and_CPP 標題: [問題] fork的問題 時間: Sun Mar 29 20:57:34 2009 #include<stdio.h> #include<unistd.h> int main(int argc, char *argv[]) { printf("fork "); //可是他x的居然跑來這裡... 或是在這裡加個 fflush(stdout); int n = atoi(argv[1]); pid_t pid = 0; while(pid == 0 && n) //會跳到這裡執行 { --n; pid = fork(); //理論上fork出來 } if(pid > 0) { wait(NULL); printf("%d ",n); return 0; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.249.225

03/29 21:24, , 1F
解決了,是buffer的問題
03/29 21:24, 1F

03/29 21:25, , 2F
分享一下 我還沒想通 XD
03/29 21:25, 2F

03/29 21:42, , 3F
是printf內建buffer的關係,實際上還是從while開始跑
03/29 21:42, 3F
※ 編輯: Domos 來自: 140.112.249.225 (03/29 21:44)

03/29 21:45, , 4F
原來如此 在 printf 後加個 fflush(stdout); 似乎也可以
03/29 21:45, 4F

03/29 21:46, , 5F
哦哦 原po有講了 XDD
03/29 21:46, 5F
文章代碼(AID): #19pt11EZ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19pt11EZ (C_and_CPP)