日期:2014-05-16  浏览次数:20712 次

这难道是linux的bug吗??求高手指点!
我装的是fedora 16,今天在写c程序时,意外发现 fork()函数出现了很奇怪的现象。
下面两段代码执行的结果竟然不一样
代码一:
  #include<stdio.h>
  int main()
  {
  int pid;
  printf(“aaaaaa”);
  printf(“bbbbbb”);
  pid=fork();
  return 0;
  }
执行结果:
  aaaaaabbbbbbaaaaaabbbbbb

代码二:
  #include<stdio.h>
  int main()
  {
  int pid;
  printf(“aaaaaa\n”);
  printf(“bbbbbb\n”);
  pid=fork();
  return 0;
  }
执行结果:
  aaaaaa
  bbbbbb

这两个程序的代码知识相差了一个换行啊,怎么会结果不一样呢?其他人可以试试你们的情况是不是也是这样。
还请高手指点啊!

------解决方案--------------------
这难道是linux的bug吗~~~~~~~~~~~~~这么霸气的标题~~~~~我以为是啥呢

第一个中:先后printf了两句到缓存里,没刷新缓存又创建了子进程,子进程复制了父进程的资源,所以子进程中也有aaaabbbb,进程结束时清空缓存,所以父进程输出一遍,子进程输出了一遍(程序结束时输出的)

第二个中:printf遇到"\n"刷新缓存,输出了aaaa bbbb,缓存中没有内容了,fork时子进程缓存也是空的。。所以只输出了一遍(是在fork前输出的)
------解决方案--------------------
探讨

这难道是linux的bug吗~~~~~~~~~~~~~这么霸气的标题~~~~~我以为是啥呢

第一个中:先后printf了两句到缓存里,没刷新缓存又创建了子进程,子进程复制了父进程的资源,所以子进程中也有aaaabbbb,进程结束时清空缓存,所以父进程输出一遍,子进程输出了一遍(程序结束时输出的)

第二个中:printf遇到"\n"刷新缓存,输出了aaaa bbbb,缓存中没有内容了……