Как я читаю и просматриваю иноды - PullRequest
6 голосов
/ 09 июня 2011

Я открыл суперблок и дескриптор группы в файловой системе EXT2, но я не знаю, как читать, например, корневой каталог или файлы в нем ...

Вот некоторые изя получил

fd=open("/dev/sdb2", O_RDONLY);
lseek(fd, SuperSize, SEEK_SET);
read(fd, &super_block, SuperSize);
lseek(fd, 4096, SEEK_SET);
read(fd, &groupDesc, DescriptSize);

, но следующая часть, похоже, не работает ...

lseek(fd, super_block.s_log_block_size*groupDesc.bg_inode_table, SEEK_SET);
lseek(fd, InodeSize*(EXT2_ROOT_INO-1), SEEK_CUR);
read(fd, &root, InodeSize);

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Я не совсем понимаю, о чем вы спрашиваете, но здесь идет речь:

Чтобы прочитать содержимое каталога, вам, в основном, нужно заглянуть внутрь его блока указателя, посмотреть соответствующие блокина диске, указанном указателями, и прочитайте содержимое, найденное там, чтобы получить описания файлов в каталоге.

Это довольно высокоуровневое предложение, но все остальное сводится к изучению деталей системы.сами структуры.

Я бы порекомендовал взглянуть на главу 4 этого: http://www.nongnu.org/ext2-doc/ext2.html

, а также удостовериться, что у вас есть ясность относительно конкретных структур, касающихся вашего дела, которые должны быть предоставленыдля вас где-то в назначении ...

1 голос
/ 16 декабря 2012

Дескриптор группы блоков - это все, что вам нужно для обхода файловой системы ext. Суперблок дает общую информацию о файловой системе, а также о расположении дескриптора группы блоков (BGD). Оказавшись внутри BGD, вы получите информацию о каждой группе блоков в файловой системе.

Чтобы найти корневой каталог, вам нужно заглянуть в группу блоков FIRST и проверить второй индекс; иначе известный как номер индекса 2. Это может быть достигнуто от местоположения первого индекса, + sizeof (индекс). В свою очередь, местоположение первого inode можно найти внутри записи BGD для первой группы блоков.

Дайте мне знать, если вам нужна дополнительная информация.

...