我不认为你的项目在stat(2)
API 层真的可以解决。考虑一个 4096 字节长的文件的情况。假设它是通过一遍又一遍地迭代附加 512 字节块而创建的。假设每次写入文件系统都已满,除了一个 512 字节的块。假设每次写入可用的 512 字节块位于磁盘上随机可用的位置。
该文件是 100% 碎片化的——没有两个块彼此靠近。
然而,仅基于stat(2)
变量的度量很可能表明文件中的任何地方都没有浪费的块。
在试图找到您的实际问题的答案时,我ext3_write_begin()
在被叫走之前就已经走到了尽头——希望这是您搜索的有用起点。
更新
如果您对查找碎片感兴趣,我认为开始的地方是程序中的bmap
命令debugfs(8)
:
debugfs: bmap sars_first_radio_show.zip 0
94441752
debugfs: bmap sars_first_radio_show.zip 1
94441781
debugfs: bmap sars_first_radio_show.zip 2
94441782
debugfs: bmap sars_first_radio_show.zip 3
94441783
debugfs: bmap sars_first_radio_show.zip 4
94441784
debugfs: bmap sars_first_radio_show.zip 5
94459905
debugfs: bmap sars_first_radio_show.zip 6
95126019
debugfs: bmap sars_first_radio_show.zip 7
95126020
debugfs: bmap sars_first_radio_show.zip 8
95126021
debugfs: bmap sars_first_radio_show.zip 9
95126022
debugfs:
这显示了文件的前十个块sars_first_radio_show.zip
;您可以看到这些块并非都是连续的:944417{52,81,82,83,84}、94459905、951260{19,20,21,22}。
您可以编写一个答案,debugfs(8)
也可以libext2fs
自己使用库例程。stat(2)
与您正在经历的练习相比,这将是复杂性的重要一步——但答案将意味着什么,而不仅仅是一个模糊的猜测。