c语言-关于fork函数

个人学习 发布于 2013/11/20 10:42
阅读 1K+
收藏 1
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
 
int main(void)
{
   int i;
   for(i=0; i<2; i++){
      fork();
      printf("1");
   }
 
   return 0;
}

得到的结果是:

求解释!!


在ubuntu12.04server上运行的,代码截图:

加载中
1
算法与编程之美
算法与编程之美

引用来自“lingxi27”的答案

P1fork出P2,P3

P2fork出P4

P1,P2各打印两次,P3,P4各打印一次


P1,i=0---->fork P2,i=0---->print---->P1,i=1---->fork P3,i=1---->print---->P1,i=2---->P1 end

                         P2,i=0---->print---->P2,i=1---->fork P4,i=1---->print---->P2,i=2---->P2 end

                                                                               P3,i=1---->print---->P3,i=2---->P3 end

                                                                               P4,i=1---->print---->P4,i=2---->P4 end

楼主第一块代码和第二块代码是不一样的,区别在于第二块代码的printf后加了'\n',该处的影响就在于消除了printf的缓存。所以代码一输出八个“1”而代码二只会输出六个“1”。

为什么?原因在于P1在fork出P2的时候,P1,P2此时都没有buffer,而P2在fork出P4以及P1在fork出P3的时候,此时printf有buffer,所以如果这时候没有flush buffer,后面的P3,P4都会打印buffer里面的数据。

lingxi27
lingxi27
好吧,没看仔细
0
SuParker
SuParker
正解!记得刷新缓冲区。。。
0
lingxi27
lingxi27

P1fork出P2,P3

P2fork出P4

P1,P2各打印两次,P3,P4各打印一次


P1,i=0---->fork P2,i=0---->print---->P1,i=1---->fork P3,i=1---->print---->P1,i=2---->P1 end

                         P2,i=0---->print---->P2,i=1---->fork P4,i=1---->print---->P2,i=2---->P2 end

                                                                               P3,i=1---->print---->P3,i=2---->P3 end

                                                                               P4,i=1---->print---->P4,i=2---->P4 end

0
kittenk
kittenk
没问题
0
中山野鬼
中山野鬼
求解释,我都不知道解释什么哈,看别人答案才理解问题。。
0
晴风晓月
晴风晓月

引用来自“中山野鬼”的答案

求解释,我都不知道解释什么哈,看别人答案才理解问题。。

居然野鬼也有转不过弯来的时候……

不过貌似这个问题陈皓专门写过一篇文章吧

0
中山野鬼
中山野鬼

引用来自“晴风晓月”的答案

引用来自“中山野鬼”的答案

求解释,我都不知道解释什么哈,看别人答案才理解问题。。

居然野鬼也有转不过弯来的时候……

不过貌似这个问题陈皓专门写过一篇文章吧

我看了答案才知道是讨论print输出数量的问题。哈
0
个人学习
个人学习

引用来自“中山野鬼”的答案

引用来自“晴风晓月”的答案

引用来自“中山野鬼”的答案

求解释,我都不知道解释什么哈,看别人答案才理解问题。。

居然野鬼也有转不过弯来的时候……

不过貌似这个问题陈皓专门写过一篇文章吧

我看了答案才知道是讨论print输出数量的问题。哈
其实,我本想问为什么打印出来的8个1被断成两截的问题。
谁知自己不明不白的多写了个\n,居然有另外一层含义。
0
GoogleGood
GoogleGood
为什么会输出这样的一个解决?请指点指点。
返回顶部
顶部