2012-11-17 26 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