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水木清华站∶精华区