我正在用C语言编写一些软件,该软件以递归方式列出给定目录中的所有文件,现在我需要计算内部碎片。
我花了很长的时间对此进行研究,发现ext2的内部碎片仅发生在最后一个块中。我知道从理论上讲,一个inode编号应该可以获取第一个和最后一个块地址,但是我不知道如何。
我研究了stat()
,fcntl()
和各种方法。如何从inode编号获得最后一个块地址?
我还发现,一旦有了最后一个块的地址,便可以进行测试,以查看该块中有多少可用空间,这将给我内部碎片。
我知道有一个get_inode
和get_block
命令,但除此之外没有其他想法!
最佳答案
我认为您无法通过常规系统调用(例如stat()
)获得磁盘块的地址。您可能必须在磁盘上找到原始索引节点(这意味着访问原始磁盘,并且需要提升的特权)并从那里处理数据。
通常,您会找到文件的直接块,间接块,双间接块和三重间接块。但是,相关的文件系统类型几乎和dodo一样死了(我认为我没有看到这个千年的文件系统类型),因此现在不太可能有太大帮助。
可能会有非标准的系统调用来获取信息,但我对此表示怀疑。