缓冲与冲洗
缓冲与冲洗
标准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操作,我们称其为冲洗。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理