c - 获取 ext2 镜像中的特定 inode (C)

标签 c filesystems inode ext2

我想使用 C 语言访问 ext2 镜像中的特定 inode(使用其编号)。我打算通过使用 open() 系统调用打开 ext2 图像来执行此操作,然后使用具有正确偏移量的 lseek() 遍历它,直到到达 inode。它是否正确?还是我做错了什么?我有点困惑使用 open() 是否正确,或者是否有更合适的函数来执行此操作。

int fd = open("ext2fs.img", O_RDONLY);
assert(fd != -1);


off_t startPosition = lseek(fd, 0, SEEK_CUR);
assert(startPosition != -1);

我是否应该只向 startPosition 添加偏移量,直到到达 inode ?但是如何搜索特定的 inode?

已更新(更具体)

我已经有了 ext2 文件系统的布局 ( http://www.nongnu.org/ext2-doc/ext2.html ),这为我提供了我需要的所有重要信息(所有偏移量)。我需要创建一个 C 程序来处理元数据和数据。例如,删除和复制文件。

我知道该怎么做,但我在实现时遇到了困难。

例如:为了测试我是否知道自己在做什么,我正在尝试读取教授提供的 ext2 磁盘镜像中的空闲 inode 数量,这样做:

#define SUPER_BLOCK 1024

int main()
{
    int freeInodes;

    int fd = open("path.img", O_RDONLY);
    off_t startPosition = lseek(fd, 0, SEEK_CUR);

    lseek(fd, startPosition + SUPER_BLOCK + 16, SEEK_CUR);
    read(fd, freeInodes, 4);
    printf("Number of free inodes: %d", freeInodes);
}

我收到的输出是:“空闲 inode 数:32767”

我是否正确解释了从 read() 获得的数据?我不知道收到的这个值是否正确。

最佳答案

除了规避文件系统安全之外,没有真正的通过 inode 访问的用例。 在 Linux 中,debugfs 允许您这样做。如果您认为这是绝对必要的,请尝试 debugfs 的源代码。

考虑使用来自文件树遍历 (ftw()/nftw() ) 的 stat() 调用作为回调,或直接使用 stat() + scandir() 以加快编码速度。两者都允许您获取您有权统计的文件的所有 inode 。并打开或其他任何东西。

关于c - 获取 ext2 镜像中的特定 inode (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27027520/

相关文章:

docker - Alpine Linux - root 安装为 ro iso9660 文件系统 如何重新安装为 rw 覆盖层?

linux - 自定义扩展文件属性

android - 如何在 Android 中检查空闲节点数

makefile - make 使用 stat 吗?这些数据是否存储在操作系统中?

c - 接受错误 : Resource temporarily unavailable

c - 从二进制文件中读取随机结构数组元素

c - 在linux上挂载USB存储的问题

objective-c - 是否有任何函数可以检索与 inode 关联的路径?

linux - 关于EXT2文件系统的多个问题

c - 在启用换行的情况下将终端光标返回到行首