从 ext3 文件系统读取块?

发布于 2024-08-09 18:31:45 字数 151 浏览 6 评论 0原文

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

What's the easiest way to access an ext3 file system at the block level? I don't care for the files, or raw bytes, I just have to read the FS one block at a time. Is there a simple way to do this (in C)? Or maybe a simple app whose source I could look into for inspiration? I found no usable tutorials on the net, and I'm a bit scared to dive into the kernel source to find out how to do it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你是暖光i 2024-08-16 18:31:45

如果您想要一个简单的应用程序,那么我建议您可以看看“dd”实用程序。我是 GNU Core Utility 的一部分。其源代码可供下载。查看其主页,此处
如果您想通过 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, §or_size);
        printf("%d\n", sector_size);
        lseek(fd, n*sector_size, SEEK_SET);

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

        return 0;
}

If you want a simple app then I suggest you can take a look at "dd" utility. I comes as part of GNU Core Utility. Its source is available for download. Take a look at its home page, here.
If you want to achieve same from a C code, then please refer to following code. Hope this helps you. :)

#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, §or_size);
        printf("%d\n", sector_size);
        lseek(fd, n*sector_size, SEEK_SET);

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

        return 0;
}
囚你心 2024-08-16 18:31:45

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

请参阅包含的 debugfs,这可能足以让您开始。否则,检查标题并编写一些代码。

Yes, see e2fsprogs. This provides tools you can use to do anything(!) with ext2, ext3, and ext4 filesystems. It also contains a library interface so you can do anything else.

See the included debugfs, it might be enough for you to start. Otherwise, check out the headers and write some code.

久隐师 2024-08-16 18:31:45

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

head -c 2048 /dev/sda1 > first_2048_bytes

当然,您需要成为 root 用户。

Disk devices, and partitions within them, behave just like regular files that you can read from (and write to), e.g.:

head -c 2048 /dev/sda1 > first_2048_bytes

You'll need to be root of course.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文