我正在查看磁盘分区的低级目录结构,格式为“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分配电视有能力的。
因此目录的大小取决于它在该表中占用的空间量,目录越多,表就越大。它可能只有几个字节。
在某些方面我可能错了,但我很确定这就是为什么你没有看到十六进制的大小(因为它主要是指针)。