1

根据 iso9660 / ecma119 的结构规范,路径表包含每个路径的记录,包括起始扇区的位置及其名称,但不包括其大小。我可以找到目录条目,但不知道它包含多少个扇区(通常为 2048 字节)。是一个吗?二?六?

如果我“遍历目录树”,每个目录条目都包含引用的 location和 size,所以我可以知道要读取多少字节(本质上是多少扇区,因为目录必须使用整个扇区)。但是,路径表包括起始位置,而不包括大小,让我不知道要读取多少字节。

在我拥有的示例 iso(ubuntu-18.04.1-live-server-amd64.isofwiw)中,主卷描述符中的根目录条目显示:

         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 Lengthis 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,但没有告诉我它使用了多少扇区,让我猜测。

是的,一个扇区中未使用的字节应该是 all 0x00,所以如果我在一个扇区中读取,读取记录,然后找到第一个字节(长度)为 的一个0x00,那么我知道我已经到达记录的末尾,但是有三个问题:

  1. 如果那是规范的方式,为什么还要在目录条目中包含大小?
  2. 如果它包括 2 或 3 个扇区,对我来说一次读取它们比一次读取一个更有效。
  3. 如果我有一个目录,其记录精确地填充了一个扇区,没有一些大小属性,我不知道下一个扇区是否应该作为条目读取,或者该目录是否在这里结束。

基本上,我知道如何读取有序路径表来获取目录条目,但不知道如何使用它来知道要为目录本身读取多少扇区。理论上,我可以读取父目录以获取该目录的条目以了解大小,但这增加了查找和读取,并且几乎违背了路径表的目的。

4

1 回答 1

1

啊,我想通了。因为目录条目始终以目录本身的目录条目开头,并且数据长度始终为字节 10-17(小端为 10-13,大端为 13-17),您可以只读取字节 10- 17 从扇区开始并得到大小。仍然不如将它放入路径表本身那么有效 - 不知道他们为什么不这样做 - 但它有效。

于 2018-09-27T11:10:33.033 回答