【问题标题】:file and its clusters (or how does fseek work?) [closed]文件及其集群(或 fseek 如何工作?)[关闭]
【发布时间】:2023-03-19 18:05:01
【问题描述】:

我想知道 fseek 如何在 Windows 文件系统上工作。 据我所知,文件有点像链接 集群列表(它们可能是恒定大小的) 但我不知道 fseek 是否去它的目的地 需要阅读并跳过这个集群的长链 或者它可能是一些集群数组,所以只有 fseek 通过它查找,然后进入正确的集群 无需阅读以前的内容。可以一些 有人回答吗?

【问题讨论】:

  • 这真的是关于文件系统结构的问题,不是编程,en.wikipedia.org/wiki/File_system是一个很好的起点。
  • 想知道它是如何工作的,似乎很少有人知道,所以这将是一个很好的答案
  • 你的实际编程问题是什么?您是否发现 fseek 存在性能问题,并且您认为了解 fseek 的工作原理将帮助您解决它?
  • 这是一个优化问题 - 我想知道 fseek 跳跃(然后读取)是否真的很便宜,或者不是。我想知道它是如何实现的

标签: windows file winapi io filesystems


【解决方案1】:

如果您对 fseek() 在 Windows 上的工作方式感到好奇,请查阅 Visual Studio 附带的 CRT 源代码。

您会看到它是使用SetFilePointer() API 实现的,它只是适当地调整了FILE_OBJECT::CurrentByteOffset。

文件系统实现者将此偏移量用于同步(非重叠)读写操作。至于文件系统如何跟踪文件数据(集群/范围),因实现而异。你想解决什么问题?

【讨论】:

  • 这是一个优化方法的问题,想知道当我用 fseeak 跳转然后读取一些然后再次跳转读取一些等时在做什么 - 如果这非常便宜或更昂贵以及什么磁盘.driver 操作是否收费
  • Seek 操作本身通常很便宜。然而,当缓存开始发挥作用时,事情变得有趣了。例如,如果您 fseek 到文件中的给定偏移量,则操作系统可能会决定在其缓存中植入几页来自新偏移量的数据,以预期后续的读取操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 2021-05-26
相关资源
最近更新 更多