目录条目中的“大小”字段对目录有何意义?

目录条目中的“大小”字段对目录有何意义?

我正在查看磁盘分区的低级目录结构,格式为“vfat”文件系统。我使用的目录条目结构是:

struct __attribute__ ((packed)) Dentry
{
  char          name[11];
  Attr          attr;
  uint8_t       reserved;
  uint8_t       ctimeTenth;
  Time          ctime;
  Date          cdate;
  Date          adate;
  uint16_t      clusterHi;
  Time          mtime;
  Date          mdate;
  uint16_t      clusterLo;
  uint32_t      size;
};

因此,目录条目的最后四个字节应该表示文件或目录的大小(以字节为单位)。但是,在我的实验中,目录(不是文件)字段始终为零size。例如,这是dd我的根目录的转储,其中包含一个文件和一个非空子目录(名为qqq):

00000000  42 65 00 65 00 66 00 66  00 66 00 0f 00 fe 00 00  |Be.e.f.f.f......|
00000010  ff ff ff ff ff ff ff ff  ff ff 00 00 ff ff ff ff  |................|
00000020  01 61 00 61 00 61 00 62  00 62 00 0f 00 fe 62 00  |.a.a.a.b.b....b.|
00000030  63 00 63 00 63 00 64 00  64 00 00 00 64 00 65 00  |c.c.c.d.d...d.e.|
00000040  41 41 41 42 42 42 7e 31  20 20 20 20 00 64 43 60  |AAABBB~1    .dC`|
00000050  d1 44 d1 44 00 00 43 60  d1 44 04 00 0b 00 00 00  |.D.D..C`.D......|
00000060  41 71 00 71 00 71 00 00  00 ff ff 0f 00 3d ff ff  |Aq.q.q.......=..|
00000070  ff ff ff ff ff ff ff ff  ff ff 00 00 ff ff ff ff  |................|
00000080  51 51 51 20 20 20 20 20  20 20 20 10 00 00 20 79  |QQQ        ... y|
00000090  d1 44 d1 44 00 00 20 79  d1 44 09 00 00 00 00 00  |.D.D.. y.D......|
000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

(字节size为 0x9c - 0x9f)

您能解释一下为什么这个大小是零吗?或者,有人可以给我指出一个文档,vfat其中更详细地描述了目录条目?

(我使用的是 Ubuntu 3.11.10.3,在 Mac 上的 VMWare Fusion 中作为客户操作系统运行)

答案1

目录实际上并不是文件,而是系统组织自身的一种逻辑方式。目录的存储方式(取决于文件系统)是某种表格。例如:胖的使用F伊莱A分配电视有能力的。

因此目录的大小取决于它在该表中占用的空间量,目录越多,表就越大。它可能只有几个字节。

在某些方面我可能错了,但我很确定这就是为什么你没有看到十六进制的大小(因为它主要是指针)。

相关内容