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 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败