O Linux não permite que você faça um read(dir_name, buffer, sizeof(buffer)
- sempre retorna -1 e coloca o EISDIR em errno
. Isso provavelmente é racional, já que nem todos os sistemas de arquivos têm diretórios como arquivos. O reiserfs comumente usado não, por exemplo.
Você pode usar a chamada de sistema open()
de um programa em C para obter um descritor de arquivo de um diretório, mas coisas como readdir(3)
(da libc) chamam getdents(2)
para recuperar entradas de diretório. Provavelmente há código em cada implementação do sistema de arquivos para criar struct linux_dirent
de qualquer coisa (um arquivo, um banco de dados, uma árvore B no disco) que o sistema de arquivos usa para armazenar entradas de diretório.