缓冲与冲洗

缓冲与冲洗

标准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操作,我们称其为冲洗。

posted @ 2022-11-01 11:35  rincloud  阅读(55)  评论(0)    收藏  举报