Uma correção: o diretório é uma lista de pares de inodes fileNAME. E não é um arquivo "comum". Como links simbólicos, sockets e nós de dispositivos, seu comportamento é diferente daquele dos arquivos comuns.
No shell, você pode ver o mapeamento com ls -i
.
A partir de C, a estrutura retornada por readdir()
contém um elemento d_name
e um d_ino
, a partir do qual você também pode ver esse mapeamento.
A partir do userspace, o fato de um diretório mapear nomes de arquivos para inodes geralmente não é tão importante, porque o kernel requer que você designe arquivos pelo nome deles de qualquer maneira. Não permite que você peça um arquivo pelo número do inode.
Links simbólicos são outro exemplo de um tipo de arquivo que contém informações que não podem ser lidas como se fossem um fluxo de bytes com chamadas de sistemas como read()
. Como um arquivo comum, contém dados. Nesse caso, os dados têm um significado especial: é um nome de caminho (que é uma string) nomeando o destino do symlink. Ao contrário de um arquivo comum, o conteúdo não é gravado usando write()
, mas com symlink()
, e o conteúdo não é lido usando read()
, mas com readlink()
.