缓冲与冲洗
缓冲与冲洗
标准IO是带缓冲的IO,一共有3种类型的缓冲:
- 全缓冲:缓冲区填满后才进行IO操作,如磁盘文件
- 行缓冲:遇到换行符才进行IO操作,如命令行终端(stdin和stdout)
- 无缓冲:不经过缓冲,立即进行IO操作,如stderr
一般情况下,系统默认使用下列类型的缓冲:
- stderr是无缓冲的
- 指向终端设备的流是行缓冲的,否则是全缓冲的
对于一个打开的流,可以调用setbuf或setvbuf改变其缓冲类型.
//成功返回0,失败返回非0
void setbuf(FILE *fp, char *buf);
int setvbuf(FILE *fp, char *buf, int mode, size_t size);
- setbuf用于关闭或打开fp的缓冲机制,若打开,则buf必须指向一个长度为BUFSIZ的缓冲区;若关闭,则buf设为NULL
- setvbuf通过参数mode可精确设置缓冲类型,
_IOLBF==全缓冲, _IOLBF==行缓冲,_IONBF==无缓冲 - 当setvbuf设置为带缓冲时,buf必须指向一个长度为size的缓冲区,推荐将buf设为NULL让系统自动分配缓冲区长度,此时size可设为0
对于全缓冲和行缓冲,不管是否满足IO条件,都可以使用fflush函数强制进行IO操作,我们称其为冲洗。

浙公网安备 33010602011771号