我正在用C编写一些软件,以递归方式列出给定目录中的所有文件,现在我需要计算出内部碎片。
我花了很长时间研究这个,并发现ext2上的内部碎片只发生在最后一个块中。 我知道从理论上的inode数字你应该能够获得第一个和最后一个块地址,但我不知道如何。
我已经研究过stat()
, fcntl()
和各种方法。 如何从inode编号中获取最后一个块地址?
我还想到,一旦我有了最后一个块的地址,我可以测试一下,看看该块中有多少可用空间,这将给我内部碎片。
我知道有一个get_inode
和一个get_block
命令,但get_block
不知道!
我不认为你可以通过常规系统调用(如stat()
获取磁盘块的地址。 您可能必须在磁盘上找到原始inode(这意味着访问原始磁盘,并需要提升权限)并从那里处理数据。
传统上,您可以找到文件的直接块,间接块,双间接块和三重间接块。 但是,相关的文件系统类型与dodo一样死(我不认为我已经看到了这个千年的文件系统类型),所以现在不太可能提供太多帮助。
可能存在非标准系统调用以获取信息,但我对此表示怀疑。
也许你认为太复杂,但如果你将文件大小除以块大小并取模数,大致应该能够计算内部碎片。
但这仅在文件是“经典文件”时才有效 – 稀疏文件或文件包含很多“其他信息”(例如巨大的ACL或扩展属性),可能会有所不同。 (我不知道它们存储在哪里,但我可以想象可能有文件系统将它们存储在最后一个块中,有效地(但不会引人注意地)减少内部碎片。)
需要了解更多c/c++开发分享MINIX内部碎片2,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享MINIX内部碎片2相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/980683.html