fork函数的坑

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{

  int i;
  for(i=0; i<2; i++)
  {
    fork();
    printf("A");
  }
  return 0;

}

首先这个题问,产生了多少个进程,打印出来了多少个A
行缓冲概念:
什么是行缓冲?
当输入输出遇到换行符的这类缓冲定义为行缓冲。标准输入和标准输出都是行缓冲。
引入缓冲区的目的是什么?
简单的讲,设置缓冲区是为提高IO速度,减少CUP等待IO而浪费CPU资源。

大部分磁盘都是机械硬盘,读取寻道时间和写入寻道时间都是在ms级别。
相对于内存读写速度都非常快,因为内存属于电子设备,读写速度时nm级别的。因此在内存上设置IO缓冲区,相对于从磁盘上读写数据可以显著的提高读写速度。
缓冲区刷新的条件:
1.进程结束。
2.遇到\n。
3.缓冲区满。
4.手动刷新缓冲区fflush(stdout)。
5.调用exit(0);但是还可以调用_exit(0),不刷新缓冲区。

看执行结果,相对于增加换行符的printf多输出了两个A,这是为什么?

fork出来的子进程会拷贝父进程的缓冲区。只要能把握住这一点,就能分析出原因来

在这里插入图片描述

个人理解最后为什么会输出8个A是因为
1 + 2 + 2 + 3模式,因为将缓冲区进行拷贝之后输出

猜你喜欢

转载自blog.csdn.net/flf1234567898/article/details/108451550