我正在用 C 语言编写一些软件,它递归地列出给定目录中的所有文件,现在我需要计算出内部碎片。
我花了很长时间研究这个问题,发现 ext2 上的内部碎片只发生在最后一个块中。我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址,但我不知道如何获得。
我调查过stat()
, fcntl()
以及各种方式。如何从 inode 编号获取最后一个块地址?
我还发现,一旦获得了最后一个块的地址,我就可以测试该块中有多少可用空间,这将为我提供内部碎片。
我知道有一个get_inode
and a get_block
命令但除此之外不知道!
我认为您无法通过常规系统调用获取磁盘块的地址,例如stat()
。您可能必须在磁盘上找到原始 inode(这意味着访问原始磁盘,并且需要提升的权限)并从那里处理数据。
通常,您会发现文件的直接块、间接块、双间接块和三重间接块。然而,相关的文件系统类型几乎和渡渡鸟一样消亡了(我想我在这千年里还没有见过这种文件系统类型),所以现在这不太可能有多大帮助。
可能有一个非标准的系统调用来获取信息,但我对此表示怀疑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)