如何读取和遍历inode

我在EXT2文件系统中打开了超级块和组描述符,但我不知道如何读取例如根目录或其中的文件…

这是我得到的一些东西

fd=open("/dev/sdb2", O_RDONLY); lseek(fd, SuperSize, SEEK_SET); read(fd, &super_block, SuperSize); lseek(fd, 4096, SEEK_SET); read(fd, &groupDesc, DescriptSize); 

但是下一部分似乎不起作用……

 lseek(fd, super_block.s_log_block_size*groupDesc.bg_inode_table, SEEK_SET); lseek(fd, InodeSize*(EXT2_ROOT_INO-1), SEEK_CUR); read(fd, &root, InodeSize); 

我不完全清楚你在问什么,但是这里有:

要读取目录的内容,您基本上需要查看它的指针块,查看指针指定的磁盘上的相应块,并读取在那里找到的内容以获取目录中文件的描述。

这是一个相当高级别的建议,但其余的真正归结为系统结构本身的细节。

我建议查看第4章: http : //www.nongnu.org/ext2-doc/ext2.html

并确保你清楚你的案件中有关的具体结构,这应该在任务的某个地方为你提供……

块组描述符是遍历ext文件系统所需的全部内容。 超级块为您提供有关文件系统的一般信息,以及块组描述符(BGD)的位置。 进入BGD后,您可以获得有关文件系统中每个块组的信息。

要查找根目录,那么您需要查看FIRST块组,并检查第二个inode; 也可以从第一个inode的位置,+ sizeof(inode)到达。也可以称为inode编号2。 反过来,第一个inode的位置可以在第一个块组的BGD条目中找到。

如果您需要更多信息,请告诉我。