c-如何读取和遍历索引节点



我打开了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章:

https://www.nongnu.org/ext2-doc/ext2.html

还要确保你清楚你的案例中涉及的具体结构,这些结构应该在作业中的某个地方提供给你。。。

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

要查找根目录,则需要查找FIRST块组,并检查第二个inode;也称为索引节点编号2。这可以从第一个inode的位置+sizeof(inode)到达。反过来,第一索引节点的位置可以在第一块组的BGD条目内找到。

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

最新更新