缓冲与冲洗

缓冲与冲洗

标准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 @   rincloud  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示