我正在用C语言编写一些软件,递归地列出给定目录中的所有文件,现在我需要计算出内部碎片。
我花了很长时间研究这个问题,发现ext2上的内部碎片只发生在最后一个块中我知道,从理论上讲,从inode号应该可以得到第一个和最后一个块地址,但我不知道如何。
我已经研究了stat()fcntl()和各种各样的方法如何从索引节点编号中获取最后一个块地址?
我还发现,一旦我有了最后一个块的地址,我可以测试,看看有多少空闲空间在这个块,这将给我内部碎片。
我知道有一个get_inode和一个get_block命令,但是除了这个之外我不知道!

最佳答案

我不认为你能通过常规的系统调用,比如stat(),得到磁盘块的地址您可能需要在磁盘上找到原始inode(这意味着访问原始磁盘,需要提升权限)并从那里处理数据。
从经典意义上讲,您可以找到文件的直接块、间接块、双间接块和三间接块然而,相关的文件系统类型和dodo一样死气沉沉(我不认为我在这个千年中见过这种文件系统类型),所以这现在不太可能有多大帮助。
可能有一个非标准的系统调用来获取信息,但我对此表示怀疑。

关于c - MINIX内部碎片2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8497943/

10-11 22:34