BBS水木清华站∶精华区

发信人: boyalone (不笑), 信区: Linux        
标  题: Re: 求教一个关于进程的小程序 
发信站: BBS 水木清华站 (Fri Jul 30 18:10:37 1999) 
 
【 在 luyy75 (铿锵玫瑰) 的大作中提到: 】 
∶ 我看到一个小程序,虽然代码很简单,但改动一处后结果令我百思不得其解。 
∶ #include <stdio.h> 
∶ #include <sys/types.h> 
∶ #include <unistd.h> 
∶ int main() 
∶ { 
∶         fork(); printf("hee\n"); 
∶         fork(); printf("ha\n"); 
∶         fork(); printf("ho\n"); 
∶         return(0); 
∶ } 
∶ 代码就这么几行,很简单。运行之后:结果应该是fork出8个进程(包含父进程), 
∶ 产生14行输出。(hee,ha,ho的混合) 
∶ 但我若把上面每一句printf中的\n去掉,结果令我大感意外。 
∶ heehahoheehahoheehahoheehahoheehahoheehahoheehahoheehaho 
∶ 共出现了8组heehaho且整齐排列。反复运行结果都一样。不是说FORK出的子进程 
∶ 紧接着下面一句执行吗?那么应该是除了第一个fork之后的两个进程都输出hee之 
∶ 外其它进程都不应该输出hee了,ha也是一样(输出4个),只有ho是每个进程都输 
∶ 出。可结果为什么是这样?\n到底起了什么作用。 
                          ~~~~~~~~~~~~~~~~~~~ 
                          老问题了,上了os课的都明白 
                          子进程会继承父进程的buffer 
                          不加\n的输出会留在buffer中 
                          输出结果可想而知 
∶ 望高手不吝赐教。感激不尽。 
 
 
-- 
\                                                / 
  \    o -->                          <-- o    / 
    \++++++++++++++++++++++++++++++++++++++++/     
          两小球何时相撞? 
          解: 
               F=Ma 
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.7.126] 

BBS水木清华站∶精华区