You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言程序执行时写入文件的内容未即时保存的原因是什么

现象技术原因解析

该问题的核心是C语言标准IO(stdio.h)库的缓冲机制:
C标准库为了降低磁盘IO的次数、提升读写效率,对不同类型的IO流设置了不同的默认缓冲策略,普通磁盘文件默认使用全缓冲规则:只有满足以下三个条件之一时,暂存在内存缓冲区中的内容才会被真正写入磁盘文件:

  • 内存缓冲区被写满
  • 手动调用fflush()接口主动刷新对应文件流
  • 对应文件流被关闭(包括程序正常退出自动关闭流的场景)

对应观测到的两个现象的具体逻辑:

  • 程序调用fprintf(ofp, "test")时,字符串"test"只被写入了用户态的stdio内存缓冲区,没有触发刷盘条件。此时程序卡在第一个getchar()调用处等待用户输入,没有后续的IO操作,所以此时直接读取磁盘上的myfile文件,看不到未刷入的"test"内容。
  • 按下回车键后,getchar()获取到输入正常返回,程序继续执行fclose(ofp)逻辑,关闭文件流的操作会自动触发缓冲区刷新,把所有未写入磁盘的内容同步到磁盘,此时再查看myfile就可以看到成功写入的"test"字符串。

如果需要在写入后立刻看到内容,只需在fprintf调用后新增fflush(ofp)手动刷新缓冲区即可,不需要等待fclose执行。


内容的提问来源于stack exchange,提问作者y J.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:54:07