版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014303647/article/details/81982061
题目: 请问下面的程序一共输出多少个”-”?
int main(void)
{
int i;
for(i=0;i<2;i++){
fork();
printf("-");
}
return 0;
}
输出为:
这里看另外一个程序
int main(void)
{
int i;
for(i=0;i<2;i++){
fork();
printf("-\n");
}
return 0;
}
两个的输出是不一样的
为什么加个回车就会有不同呢??
解析:
printf是一个行缓冲函数,先写到缓冲区,满足条件后才将缓冲区刷新到对应文件中,刷新缓冲区的条件如下:
1)缓冲区填满;
2)写入的字符中有‘\n’、’\r’;
3)调用fflush手动刷新缓冲区;
4)调用scanf要从缓冲区读取数据时,也会将缓冲区内的数据刷新。
所以第一个程序中没有\n的时候,fork的时候,子进程会继承父进程的缓冲区里的 -,故画图为(此图借鉴这里写链接内容回答)
所以输出8个“-”
而为什么底下输出6个“-”呢?
这是因为遇到“\n”那么就会把缓冲里的输出到屏幕,所以i=0的时候,父进程parent和子进程child1都输出了“-”,然后他们的 缓冲区为空,所以i=1的时候,parent,child2,child1,child1_2均输出一个“-”,所以共6个“-”