【发布时间】:2016-09-04 03:48:28
【问题描述】:
我看到了一些关于阅读 ext2 分区的超级块的问题,但我有一些问题没有在这些问题中得到解答。
他们来了:
1. 使用 read() 从磁盘读取到 ext2_super_block struct 应该要求 struct 中的所有字段都按照它们在代码中出现的顺序进行编译,以及没有 struct padding 的必要性(或正确的结构填充)。怎么保证?
2. 当试图从非特权设备读取时,Linux 的行为如何?读取必须有一个初始偏移量(更准确地说,是一个映射,禁止访问前 N 个字节),因为我编写的程序仅在以 root 身份运行时才有效。无论如何,Linux 在这种情况下表现如何?
3. 我在哪里可以找到关于使用 ext2/ext3 的好文档?到目前为止,我一直在阅读 /usr/include/linux/ext2_fs.h 和互联网上的一些随机文档,但还没有找到完整的内容。
我还想听听对下面代码的建议/更正,到目前为止,它在我的机器上运行良好(包括为简洁起见省略,程序打印“ef53”):
int main() {
int fd;
char boot[1024];
struct ext2_super_block super_block;
fd = open("/dev/sda1", O_RDONLY);
/* Reads the boot section and the superblock */
read(fd, boot, 1024);
read(fd, &super_block, sizeof(struct ext2_super_block));
/* Prints the Magic Number */
printf("%x\n", super_block.s_magic);
close(fd);
return 0;
}
提前致谢。
【问题讨论】:
-
ext2fs 与 UFS 和 FFS 类似,因此您可以查阅这些文档(尽管 ext2 每个块总是有 1 个片段)。
标签: c linux filesystems