Я видел несколько вопросов по чтению суперблока раздела ext2, но у меня есть некоторые вопросы, на которые не были даны ответы.
Вот они:
1. использование read () для чтения с диска в структуру ext2_super_block должно потребовать, чтобы все поля в структуре были скомпилированы в том порядке, в котором они представлены в коде, а также необходимость отсутствия заполнения структуры (или правильной структура заполнения). Как это гарантировано?
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;
}
Заранее спасибо.