2012-11-17 24 views
0

我想知道fseek如何在Windows文件系统上工作。 据我知道一个文件是有点像联集群 列表(他们可能是恒定的大小) ,但我不知道是否FSEEK去其目的地 需要读和跳这个集群在长链 或它可能是一些簇的数组,因此fseek只查找 ,然后进入右边的簇 而不需要读取以前的簇。一些 人可以回答这个问题吗?文件及其群集(或fseek如何工作?)

+0

这实际上是一个关于文件系统结构的问题,而不是编程,http://en.wikipedia.org/wiki/File_system是一个很好的起点。 – tvanfosson

+0

想知道它是如何工作的,很少有人似乎知道它,所以这将是一个很好的答案 –

+0

你的实际编程问题是什么?您是否看到fseek的性能问题,并且您认为了解fseek的工作原理将如何帮助您解决问题? –

回答

1

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

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

文件系统实现者使用此偏移量进行同步(非重叠)读取和写入操作。至于文件系统如何跟踪文件数据(集群/扩展),各种实现之间会有所不同。你想解决什么问题?

+0

这是一个optymization方法的问题,想知道当我做了什么跳跃与fseeak然后阅读一些跳然后再读一些等 - 如果这是非常便宜或更昂贵的和什么disk.driver操作做成本 –

+0

寻求操作本身一般都很便宜。然而,当缓存进入时,事情变得有趣。例如,如果您想了解文件中给定的偏移量,则操作系统可能会决定为其后续读取操作预计从新偏移量中为其缓存几页数据。 – Bukes