Я пытаюсь распечатать все отдельные косвенные блоки в файловой системе ext2. Я могу достаточно легко напечатать прямые блоки (0-11), но я не понимаю, как добраться до одиночных косвенных блоков, а затем и двойных и тройных косвенных блоков. Если я посмотрю на значение ino->i_block[12], как мне его использовать, чтобы добраться туда, куда оно указывает? Я уверен, что мне не хватает чего-то легкого здесь
как напечатать косвенный блок в ext2
Ответы (1)
Индексный дескриптор в EXT2 имеет длину 128 байт и содержит множество различных полей.
поле i_size указывает количество байтов, хранящихся в файле, т. е. длину файла. массив i_block представляет собой массив из 15 номеров блоков.
Первые 12 записей в массиве (от i_block[0] до i_block[11]) содержат номера блоков прямых блоков: они называют блоки данных, которые содержат первые 12 блоков содержимого файла.
13-я запись в массиве (i_block[12]) содержит номер блока однократно косвенного блока: он называет блок, который содержит массив из 4-байтовых номеров блоков; каждый из этих блоков содержит дополнительное содержимое файла.
14-й элемент массива (i_block[13]) содержит номер блока с двойной косвенностью: он называет блок, содержащий массив 4-байтовых номеров блоков, каждый из этих блоков находится в блоке с одинарной косвенностью, который содержит массив 4-байтовых номеров блоков прямых блоков. 15-я запись в массиве (i_block[14]) содержит номер блока тройного косвенного блока.