在标准IO
中使用文件时,会对每个文件在内存中申请
两段内存空间
,用于缓存要进行读、写的数据,实现多次读写文件内容,只需要内核操作一次文件就可以,提高效率。
缓冲区用于减少应用程序访问内核资源次数,只有当
缓冲区满
或者
刷新
时,才将数据进行读写到文件或者程序的内存空间中。
标准
IO
提供三种缓冲:
全缓存
:当缓冲区被填满或出现特定的条件,才会刷新缓冲区
行缓存
:当输入输出遇到新行符(
'\n'
),就会刷新缓冲区
无缓存
:不进行缓存,直接刷新
通过
setbuf()
、
setvbuf()函数
可以设置打开文件的缓冲类型以及缓冲大小
#include <stdio.h>
int fflush(FILE *stream); //刷新缓冲区
三个特殊打开的文件:终端文件
当执行程序时,系统默认为程序打开终端文件,
标准输入文件:
stdin
(读取终端)
----
行缓存
标准输出文件:
stdout
(写入终端)
-----
行缓存
标准错误输出文件:
stderr
(写入终端)
----
无缓存