7

我已经在 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

2 回答 2

3

我不完全确定你在问什么,但这里是:

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

这是一个相当高级的建议,但其余的实际上归结为对系统结构本身的细节进行处理。

我建议看第 4 章:

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

还要确保您清楚与您的案例相关的特定结构,这些结构应该在作业的某个地方为您提供......

于 2011-08-15T05:34:21.387 回答
1

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

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

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

于 2012-12-15T22:59:43.020 回答