这难道是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前输出的)
------解决方案--------------------