Согласно спецификации для структуры iso9660 / ecma119, таблица путей содержит записи для каждого пути, включая местоположение начального сектора и его имя, но не его размер.Я могу найти запись каталога, но не знаю, сколько секторов (обычно 2048 байт) она содержит.Это один?Два?Шесть?
Если я "пройдусь по дереву каталогов", каждая запись каталога включает в себя ссылочное местоположение и размер , поэтому я могу знать, сколько байтов (по сути, сколько секторов, начиная с каталога)необходимо использовать целые сектора) для чтения.Однако таблица путей только включает начальное местоположение, а не размер, поэтому я не знаю, сколько байтов нужно прочитать.
В примере iso у меня есть (ubuntu-18.04.1-live-server-amd64.iso
fwiw)запись корневого каталога в первичном дескрипторе тома показывает:
Root Directory:
Directory Record Length: 34
Extended Attribute Length: 0
Location of Extent: 20 $00000014 00:00:20
Data Length: 2048 $00000800
Recording Date and Time: 23:39:04 07/25/2018 GMT 0
File Flags: $02 visible regular dir non-record no-perms single-extent
File Unit Size: 0
Interleave Gap Size: 0
Volume Sequence Number: 1
File Identifier: . (current directory)
Поскольку говорится, что Data Length
равно 2048
, я знаю, что нужно прочитать только один сектор.
ОднакоЗапись корневого каталога в таблице путей показывает:
Path Record Length: 10 $0A
Extended Attribute Length: 0 $00
Location of Extent: 20 $00000014 00:00:20
Parent Directory Number: 1 $0001
File Identifier: . (current directory)
Она также указывает на сектор 20
, но не сообщает мне, сколько секторов она использует, оставляя мне догадки.
Давсе неиспользуемые байты в секторе должны быть все 0x00
, поэтому, если я читаю в секторе, читаю записи, а затем прихожу к тому, чей первый байт (длина) равен 0x00
, то я знаю, что достиг конца записиНо у этого есть три проблемы:
- Если это был канонический способ, зачем беспокоиться о включении размера в запись каталога?
- Если он включает 2 или 3 сектора, для меня более эффективно читать их все сразу, чем по одному за раз.
- Если у меня есть каталог, записи которого точно заполняют сектор,без какого-либо атрибута размера, я не знаю, должен ли следующий сектор читаться как запись, или каталог заканчивается здесь.
В принципе, я знаю, как читать упорядоченную таблицу путейчтобы получить запись каталога, но не знаю, как ее использовать, чтобы узнать, сколько секторов нужно прочитать для самого каталога.Теоретически я мог бы прочитать родительский элемент, чтобы получить запись для этого каталога, чтобы узнать размер, но это добавляет поиск и чтение и в значительной степени отрицает цель таблицы путей.