首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当表不包括大小时,如何从path表读取iso9660上的目录?

当表不包括大小时,如何从path表读取iso9660上的目录?
EN

Stack Overflow用户
提问于 2018-09-26 20:02:20
回答 1查看 446关注 0票数 1

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

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

在一个示例中,主要卷描述符中的根目录条目(ubuntu-18.04.1-live-server-amd64.iso fwiw)显示:

代码语言:javascript
复制
         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 Length2048,所以我只知道读一个扇区。

但是,path表中的根目录条目显示:

代码语言:javascript
复制
       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的字节,那么我知道我已经到达记录的末尾,但这有三个问题:

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-27 11:10:33

啊,我想出来了。因为目录条目总是以目录本身的目录条目开头,而数据长度总是以字节10-17 (小端点为10-13,大端点为13-17 )开始,所以您可以从扇区的开头读取字节10-17并获得大小。仍然没有把它放在path表本身那么有效--不知道为什么没有--但是它起作用了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52525272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档