我正在用C语言编写一些软件,该软件以递归方式列出给定目录中的所有文件,现在我需要计算内部碎片。

我花了很长时间进行研究,发现ext2的内部碎片仅发生在最后一个块中。 我知道从理论上讲,一个inode编号应该可以获取第一个和最后一个块地址,但是我不知道如何。

我研究了stat()fcntl()和各种方法。 如何从inode编号获得最后一个块地址?

我还发现,一旦有了最后一个块的地址,就可以测试该块的可用空间,这将给我内部碎片。

我知道有一个get_inodeget_block命令,但get_block

===============>>#1 票数:1

我认为您无法通过常规系统调用(例如stat()获得磁盘块的地址。 您可能必须在磁盘上找到原始索引节点(这意味着访问原始磁盘,并且需要提升的特权)并从那里处理数据。

通常,您会找到文件的直接块,间接块,双间接块和三重间接块。 但是,相关的文件系统类型几乎和dodo一样死了(我认为我没有看到这个千年的文件系统类型),所以现在不太可能有太大帮助。

可能会有非标准的系统调用来获取信息,但我对此表示怀疑。

===============>>#2 票数:1

也许您认为过于复杂,但是如果将文件大小除以块大小并取模,则大致可以计算内部碎片。

但这仅在文件为“经典文件”时才有效-稀疏文件或包含大量“其他信息”的文件(例如,巨大的ACL或扩展属性),可能会有所不同。 (我不知道它们的存储位置,但是我可以想象可能有文件系统将它们存储在最后一个块中,从而有效地(但不引起注意)减少了内部碎片。)

  ask by Charlie translate from so

未解决问题?本站智能推荐:

3回复

通过MINIX上的文件名检索文件的inode编号

我想在VFS服务器中创建一个新的系统调用,它将被赋予一个文件名作为参数,并将在MINIX3.2.1中打印该特定文件的inode编号。 我检查了do_stat()函数的代码(在/usr/src/servers/vfs/stadir.c里面),我发现我必须分配一个vnode结构变量派系eat_pa
1回复

MINIX:按文件名检索文件的inode

在MINIX 3.2.1中 ,我想创建一个新的系统调用 ,它将被赋予一个文件名作为参数,并将打印某个文件的inode编号。 我已创建并修改了所有需要的文件。 因此,为了按名称检索文件的inode,我想使用默认的系统调用: http://minix1.woodhull.com/
1回复

MINIX 2-内核的syscall

我想对内核(getlot和setlot)进行2次syscall。 他们必须在内核的struct proc中读取并设置一些值。 问题是什么? 什么东西少了? 在/usr/include/minix/callnr.h中,我增加了NCALLS并添加了2个define 在usr /
1回复

Minix键盘驱动程序

我试图更改minix的键盘驱动程序,我的想法是将键盘中使用的所有字符存储在文件中。我声明一个全局FILE * fp并将这段代码插入/ usr / src / drivers /tty/keyboard.c 然后我在目录中运行“ make”并重新启动,但这不起作用。 我的意思是,该文件未
2回复

Minix 3:添加新命令

我目前正在尝试向Minix添加新命令。 我要添加一个名为smile的命令,该命令要连续显示一张笑脸:-) ,与yes y 。 我已经在src / commands中创建了smile目录,并带有smile.c和Makefile,并在src / commands / Makefile中添加了
1回复

最小当前时间

如何在Minix 3.2.1的printf写入当前时间? 我尝试像下面那样使用gmtime ,但是它会在time(&nowtime)上给出错误。 而且,我尝试在内核(/usr/src/kernel/main.c)中回想一下,因为我需要在minix引导时花费时间说出内核进程何时
1回复

计算Minix中的进程数

我需要创建一个用户程序,该程序可以在系统调用的帮助下查看正在运行的进程数。 我发现getsysinfo()函数可以给我结果,但是在尝试编译代码时出现错误。 我使用以下代码: 问题是,编译时出现很多错误。 我看到有许多未定义的变量,而且我不知道应该包含哪些库。 该代码似乎太浅而无
3回复

minix 3.1中的搜索功能

我一直试图在minix中实现搜索功能,该功能将在当前目录或子目录中查找文件并打印路径。 到目前为止,我的代码编译没有失败,但是由于某种原因,它仅返回了几个奇怪的ascii字符,您知道我在做什么错吗? 因此,在进入子文件夹之前,我首先检查文件是否在当前目录中,这就是为什么我两次打开和关闭
1回复

为什么在MINIX 3中不能使用double?

我正在使用MINIX3。我更改了流程计划程序,现在想在那里做一些测试。 问题是,当我想使用double时,出现错误。 有趣的是,如果我在类的全局double variable中声明并初始化一个double variable ,则不会显示错误,但是当我想在方法中使用相同的double va
1回复

ASM / C中的中断处理程序 - 如何? -Minix

我一直在Unix操作系统中编写硬件(鼠标,键盘等),Minix和我在提示将它与Assembly(AT&T语法)结合时遇到了一些问题。 截至目前我正在编程键盘(获取并打印扫描码),我需要在C和ASM中进行编程。 我已经开发了正常工作的C函数,现在我必须用ASM函数替换IH(中断处理程序),