在块级别访问 ext3 文件系统的最简单方法是什么?我不关心文件或原始字节,我只需要一次读取 FS 一个块。有没有一种简单的方法可以做到这一点(在 C 中)?或者也许是一个简单的应用程序,我可以从它的来源中寻找灵感?我在网上找不到可用的教程,而且我有点害怕深入内核源代码来了解如何去做。
问问题
1392 次
3 回答
4
如果你想要一个简单的应用程序,那么我建议你可以看看“ 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;
}
于 2009-11-04T15:54:15.390 回答
2
是的,请参阅e2fsprogs。这提供了可用于对 ext2、ext3 和 ext4 文件系统执行任何操作(!)的工具。它还包含一个库接口,因此您可以做任何其他事情。
请参阅包含的 debugfs,它可能足以让您开始。否则,请检查标题并编写一些代码。
于 2009-11-04T14:21:20.367 回答
1
磁盘设备和其中的分区就像您可以读取(和写入)的常规文件一样,例如:
head -c 2048 /dev/sda1 > first_2048_bytes
当然,您需要成为root用户。
于 2009-11-04T14:24:23.953 回答