从ext3文件系统读取块?

时间:2009-11-04 14:16:57

标签: linux ext3

在块级访问ext3文件系统最简单的方法是什么?我不关心文件或原始字节,我只需要一次读取一个块。有没有一种简单的方法(在C中)?或者也许是一个简单的应用程序,其来源我可以寻找灵感?我在网上找不到可用的教程,我有点害怕深入了解内核源代码以了解如何操作。

3 个答案:

答案 0 :(得分:4)

如果您想要一个简单的应用程序,那么我建议您查看“dd”实用程序。我是GNU Core Utility的一部分。它的来源可供下载。看一下它的主页here 如果您想从C代码实现相同的功能,请参考以下代码。希望这对你有所帮助。 :)

#include <stdio.h>
#include <linux/fs.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define SECTOR_NO 10 /*read 10th sector*/

int main()
{
        int sector_size;
        char *buf;
        int n = SECTOR_NO;

        int fd = open("/dev/sda1", O_RDONLY|O_NONBLOCK);
        ioctl(fd, BLKSSZGET, &sector_size);
        printf("%d\n", sector_size);
        lseek(fd, n*sector_size, SEEK_SET);

        buf = malloc(sector_size);
        read(fd, buf, sector_size);

        return 0;
}

答案 1 :(得分:2)

是的,请参阅e2fsprogs。这提供了可用于对ext2,ext3和ext4文件系统执行任何操作(!)的工具。它还包含一个库接口,因此您可以执行任何其他操作。

查看包含的debugfs,它可能足以让您启动。否则,请查看标题并编写一些代码。

答案 2 :(得分:1)

磁盘设备及其中的分区的行为就像您可以读取(和写入)的常规文件一样,例如:

head -c 2048 /dev/sda1 > first_2048_bytes

你当然需要扎根。