当前位置: 首页 > news >正文

标准IO-文件IO(缓冲区)

缓冲区

标准I/O中缓冲区是C语言标准库为优化文件读写效率而设计的内存机制,本质上就是一段由FILE结构体管理的内存。

缓冲区作用

通过临时内存暂存,批量处理,可以减少硬件IO的交互次数,提升程序效率;

缓冲区分类

缓冲区说明
行缓冲默认用于终端设备(stdout,stdin),Linux缓冲区大小为1024kb
全缓冲默认用于文件(.txt),Linux系统缓冲区大小为4096kb
无缓冲不使用临时内存暂存,直接写入硬件(如stderr),无缓冲区大小为0

缓冲区刷新时机

行缓冲刷新时机

  • 遇到换行符’\n’会刷新缓冲区
  • 程序正常结束会刷新缓冲区
  • 当文件关闭时会刷新缓冲区
  • 在输入和输出切换时会刷新缓冲区
  • 缓冲区写满时会刷新缓冲区
  • 主动调用fflush函数会强制刷新缓冲区

全缓冲刷新时机

  • 程序正常结束会刷新缓冲区
  • 当文件关闭时会刷新缓冲区
  • 在输入和输出切换时会刷新缓冲区
  • 缓冲区写满会刷新缓冲区
  • 主动调用fflush函数会强制刷新缓冲区

fflush函数

int fflush(FILE * stream)

作用:将指定流缓冲区尚未写入的内容,强制写入对应的输出设备,如(文件,终端等)中。
stream:指定要刷新缓冲区的流。
返回值:成功返回0,失败返回EOF并设置errno的值。

setbuf函数

void setbuf(FILE* stream, char *buf)

作用:设置指定文件流的缓存区
stream:设置缓冲存的文件流
buf:用户提供的缓存区指针,如果提供了,其大小至少是BUFSIZE字节,如果是NULL则会是无缓冲模式

setbuf函数允许设置两种方式的缓存
  • 全缓存:如果buf指向一个大小大于0的缓存区,那么IO操作将使用全缓存模式。
  • 无缓存:如果buf为NULL或大小是0,那么IO操作将使用无缓存模式。
setbuf函数注意事项
  • 调用setbuf函数应该在打开任何文件流或者是任何IO操作之前,否则可能不会生效。
  • 如果要使用自定义的缓冲区,确保缓冲区足够大,以避免缓冲区溢出。
  • 当使用自定义缓冲区时,不要在buf指向的缓冲区被释放后在进行IO操作,以免导致未定义行为。

setvbuf函数

int setvbuf(FILE* stream, char* buf, int mode, size_t size)

作用:在setbuf的基础上,允许指定缓冲区模式和缓冲区大小,该函数必须在对stream的任何操作之前执行。
stream:要设置缓冲区的大小
buf:用户提供的缓冲区指针,如果为NULL,函数会自动分配一个大小为size的缓冲区
mode:缓冲区模式
size:缓冲区的大小(以字节为单位)
返回值:成功为0,失败非0值

mode的模式:
名称说明
_IOFBF全缓冲
_IOLBF行缓冲
_IONBF无缓冲 ,当为此模式时,忽略参数size
setvbuf函数注意事项
  • setvbuf必须在文件流执行任何读写操作之前调用,否则可能导致失败,或触发未定义行为;
  • 若使用自定义缓冲区(buf != NULL),需确保缓冲区大小size与实际需求匹配,若size过小,可能导致缓冲区溢出;若size过大,会浪费内存资源;
  • 若使用自动分配缓冲区(buf != NULL),size需设置合理值(通常建议小于系统默认缓冲区大小,如BUFSIZE),避免因缓冲区过小影响性能;
  • 禁止在缓冲区被释放后对文件流执行IO操作,否则会触发未定义行为(如访问已释放内存导致系统崩溃);
  • 当mode为_IONBF时,size参数会被忽略(即设置非零值也会无效),需避免size配置无缓冲模式;
  • 不同系统对mode的支持可能有差异(如某些嵌入式环境不支持行缓冲 _IOLBF),需根据实际平台验证行为;
http://www.dtcms.com/a/509231.html

相关文章:

  • 做个简单的企业小网站企业邮箱怎么申请注册账号
  • 网站建设 自适应禄劝网络推广外包
  • [特殊字符] 神奇的二维世界:信息与意识的未来宇宙
  • 无线通信眼镜专利拆解:骨传导换能器与镜腿集成的声学传输机制研究
  • 网站域名是不是就是网址代理网页是干什么的
  • 网站可以换域名吗网站设计中常见的错误
  • 微机课做网站单页面网站模板怎么做
  • 万江建筑培训中心泰州seo公司
  • 如何设计一个完整的网站jsp网站开发难吗
  • 个人网站建设方案书 范文怎么做自己的代刷网站
  • 旅游网站做模板素材购物网站建设需要多少钱
  • 【十年后台管理系统】准备工作
  • 废旧网站哪个做的最好百度首页网站的设计
  • Progressbar组件自定义样式
  • 31.下一个排列
  • Moectf2025-webmisccrypto (持续更新
  • 济宁网站建设找哪家室内设计师工作室
  • 昆明网站建设注意事项seo咨询推广
  • 个人网站模板 html天猫优惠券网站怎么做
  • 建房城乡建设部网站wordpress 菜单保存在哪里
  • 珠海网站建设zhkmkj中国采购与招标网官网首页
  • Python开发可视化音乐播放器教程(附代码)
  • 【u-boot】u-boot支持的文件系统
  • 杭州职工业能力建设网站青岛seo全网营销
  • 哪家公司网站建设好点wordpress下载主题模板
  • 【强化学习】RLMT强制 CoT提升训练效果
  • 左Shift键失灵解决办法
  • 如何确定网站建设空间wordpress安装到本地
  • 建设网站使用的工具wordpress single模板
  • 网站域名注册费用哔哩哔哩网页入口