Pergunta

Eu entendo que um diretório é apenas um arquivo no unix que contém os números de inode e os nomes dos arquivos dentro. Como faço para dar uma olhada nisso? Eu não posso usar gato ou menos em um diretório, e abri-lo no vi apenas me mostra uma lista dos arquivos ... há números de inode.

Foi útil?

Solução

Uma vez que esta é uma questão de programação (que é uma questão de programação, não é?), Você deve verificar se as funções opendir, readdir e closedir. Estes são parte da Single UNIX Spec.

#include <sys/types.h>
#include <dirent.h>

DIR *opendir (const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

O arquivo dirent.h deve ter a estrutura que você precisa, contendo no mínimo:

char   d_name[]    name of entry
ino_t  d_ino       file serial number

aqui para o manpage readdir - ele contém links para os outros.

Tenha em mente que a quantidade de informações sobre um arquivo armazenado nas entradas de diretório para que seja mínima. O inode contém em si as coisas que você começa a partir da função stat, coisas como vezes, tamanho, proprietário, permissões e assim por diante, junto com os ponteiros da mais alta importância para o conteúdo do arquivo real.

Outras dicas

Nos velhos tempos - Versão 7, sistema III, no início System V - você poderia certamente abrir um diretório e ler o conteúdo na memória, especialmente para o antigo sistema de arquivos Unix com números de inode de 2 bytes e um limite de 14 bytes no nome do arquivo.

Como os sistemas de arquivos mais exótico tornou-se mais prevalente, o opendir (), readdir (), closedir () família de chamadas de função teve que ser usado em vez porque analisar o conteúdo de um diretório tornou-se cada vez mais não-trivial.

Finalmente, na última década ou assim, ele atingiu o ponto em que na maioria dos sistemas, você não pode ler o diretório; você pode abri-lo (principalmente para operações como fchdir () pode trabalhar), e você pode usar a família opendir () de chamadas para lê-lo.

Parece que o stat comando poderia estar em ordem. Do artigo:

stat /etc/passwd

    File: `/etc/passwd'
    Size: 2911                Blocks: 8 IO    Block: 4096 regular file
    Device: fd00h/64768d      Inode: 324438   Links: 1
    Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
    Access: 2008-08-11 05:24:17.000000000 -0400
    Modify: 2008-08-03 05:11:05.000000000 -0400
    Change: 2008-08-03 05:11:05.000000000 -0400
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top