u010666247 2015-08-30 17:36 采纳率: 0%
浏览 2205

c标准库的fputc写入文件的机制问题

最近用c编一个小程序,用到fputc向文件内写入字符,希望保持原有文件内容而能覆盖特定位置的字符。使用fputc以rt+方式打开文件可以实现这个。可是问题来了,硬盘在读写的时候将同时读写一整个扇区,那么fputc实现覆盖文件某个位置的字符是怎样实现的呢?是将一整个扇区读入后修改对应字符再写入?那么这样的话势必需要一个缓冲区,如果真是这样,这个缓冲区会维持到什么时候呢?比如我连续调用两次fputc,写入的数据在都同一扇区内,需要读取几次文件?

  • 写回答

2条回答 默认 最新

  • threenewbee 2015-08-30 18:28
    关注

    这个根本不劳你操心,这些是操作系统底层甚至硬件的事情。硬盘自身、操作系统都有缓存。

    通常一个机械硬盘自身带有8~64MB的缓存,并且它会自动优化读写顺序,避免来回寻址。操作系统的IO缓存就更大了。这个没法估计。

    而且,事实上,现代的硬盘,因为容量非常非常大,速度非常非常快,每次读写其实都不是1个扇区,可能是8个扇区或更多——即便你只修改一个字节。

    不过不管怎么说,从你编程的角度看,你不用关心底层这些实现,操作系统和硬盘本身无论怎么设计,都保证了你的数据读写是没有问题的。

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧