Lê um diretório para ver o arquivo no mapeamento de inode

6

Estou apenas aprendendo sobre sistemas de arquivos e diz-se que um diretório é apenas um arquivo comum que mantém uma lista de pares de inode de arquivo.

Se eu tentar abrir o diretório Downloads com qualquer um dos seguintes cat less tail , ele apenas mostrará que é um diretório e não pode ser aberto.

Idéias de como lê-lo?

    
por TheMeaningfulEngineer 16.01.2013 / 19:38

3 respostas

8

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() .

    
por 16.01.2013 / 19:48
2

Um diretório é como um arquivo, mas o kernel restringe o acesso permitindo apenas que determinadas chamadas do sistema abram, leiam e gravem em uma entrada de diretório. Aqui estão alguns exemplos das diferenças nas funções C:

File      Directory
open()    opendir()
read()    readdir()
write()   N/A
close()   closedir()
    
por 16.01.2013 / 19:48
0

Também depende do sistema operacional. Eu não sei a explicação específica, mas tenho experimentado uma diferença entre os comportamentos Linux e Unix a esse respeito. Especificamente FreeBSD, você PODE cat um diretório. Me jogou fora da primeira vez que tentei.

    
por 16.01.2013 / 21:21