O campo “tamanho” no significado da entrada de diretório para diretórios?

0

Estou vendo a estrutura de diretório de baixo nível de uma partição de disco, formatada como sistema de arquivos "vfat". A estrutura de entrada de diretório que eu uso é:

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;
};

Assim, os últimos quatro bytes da entrada de diretório devem representar o tamanho do arquivo ou diretório em bytes. No entanto, nas minhas experiências, as entradas de diretório para diretórios (não arquivos) sempre têm zero no campo size . Por exemplo, isso é dd dump do meu diretório raiz com um arquivo e um subdiretório não vazio (denominado 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  |................|

(Bytes com size são 0x9c - 0x9f)

Você poderia me explicar por que esse tamanho é zero? Ou pode ser, alguém poderia me apontar para um documento, descrevendo vfat entradas de diretório com mais detalhes?

(Eu estou no Ubuntu 3.11.10.3, rodando como um sistema operacional convidado no VMWare Fusion no Mac)

    
por HEKTO 17.06.2014 / 22:46

1 resposta

0

Um diretório não é, na verdade, um arquivo, mas uma maneira lógica de um sistema se organizar. A maneira como os diretórios seriam armazenados (dependendo do sistema de arquivos) em algum tipo de tabela. Por exemplo: FAT usa uma F ile A opção T capaz.

Portanto, o tamanho do diretório dependeria da quantidade de espaço ocupado nessa tabela, mais diretórios equivalem a tabelas maiores. Pode ser apenas um par de bytes.

Eu posso estar errado em alguns pontos, mas tenho certeza que é por isso que você não está vendo o tamanho no hex (como é principalmente um ponteiro).

    
por No Time 18.06.2014 / 00:04