当前位置: 技术问答>linux和unix
一个奇怪的问题
来源: 互联网 发布时间:2015-10-19
本文导语: 今天晚上看到一个有个关于fork的程序 #include #include #include int main() { fork(); printf("1n"); fork(); printf("2n"); fork(); printf("3n"); return ...
今天晚上看到一个有个关于fork的程序
#include
#include
#include
int main()
{
fork();
printf("1n");
fork();
printf("2n");
fork();
printf("3n");
return 0;
}
执行结果如下(14行):
1
2
1
2
2
3
3
[root@localhost Debug]# 3
3
2
3
3
3
3
但是如果吧printf中的换行符(n)都去掉后执行结果如下(24项)
123123[root@localhost Debug]# 123123123123123123
想了半天都不知道什么原因,只是少了一个换行符而已,结果却不一样,
哪位高手帮忙解答一下
#include
#include
#include
int main()
{
fork();
printf("1n");
fork();
printf("2n");
fork();
printf("3n");
return 0;
}
执行结果如下(14行):
1
2
1
2
2
3
3
[root@localhost Debug]# 3
3
2
3
3
3
3
但是如果吧printf中的换行符(n)都去掉后执行结果如下(24项)
123123[root@localhost Debug]# 123123123123123123
想了半天都不知道什么原因,只是少了一个换行符而已,结果却不一样,
哪位高手帮忙解答一下
|
标准输出都是行缓冲的,也就是说输出不满一行的话不会输出
不过进程退出时,所有的缓冲都会被写出
最后的进程数为8,每个进程的输出缓冲区为123,所以3*8=24
第一种方法中,printf("1n")中的1在第二次fork时已经输出,并没有传到子进程中去,所以四个子进程都不会打出1来
不过进程退出时,所有的缓冲都会被写出
最后的进程数为8,每个进程的输出缓冲区为123,所以3*8=24
第一种方法中,printf("1n")中的1在第二次fork时已经输出,并没有传到子进程中去,所以四个子进程都不会打出1来