Eu tenho a 1ª edição do livro The Unix Programming Environment. No capítulo 2, os autores declaram que os diretórios são legíveis como arquivos e mencionam alguns fatos sobre o formato desses arquivos. Eles dão alguns exemplos de uso, como cat .
(no exercício 2-2).
Pelo menos em Darwin, os diretórios não são mais legíveis como arquivos. Pelo menos, eles parecem arquivos de tamanho zero quando lidos.
Quando essa mudança ocorreu e existe alguma documentação oficial sobre isso?
files
filesystems
directory
Tyler
fonte
fonte
cat .
enquanto no Solaris 11 (como no Linux), não pode. Legal.Respostas:
A referência do número de erro da última especificação POSIX (POSIX.1-2008) indica:
Isso significa que, em um sistema operacional compatível com POSIX, você poderá ler () um diretório se o tiver aberto apenas para leitura (O_RDONLY).
Eu apenas tentei isso em uma caixa do NetBSD (que realmente se preocupa com o POSIX) e funciona como esperado, enquanto falha no GNU / Linux com EISDIR (o que não deveria acontecer).
Uma rápida olhada no Linux mostra que isso é pretendido ( http://lxr.free-electrons.com/source/fs/libfs.c#L189 ):
Embora uma implementação concreta do sistema de arquivos possa substituí-la (como o CEPH faz: http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142 ), o comportamento padrão é retornar o EISDIR sempre que alguém estiver tentando read () um diretório, mesmo que seja somente leitura aberta.
Rastreei essa alteração até a versão 2.0.xe, pelo menos para o sistema de arquivos ext2, esse ainda era o caso.
Portanto, sim, em um sistema operacional compatível com POSIX, você poderá ler um diretório, mas alguns kernels (como Linux e, aparentemente, outros) simplesmente ignoram essa condição e quebram os padrões.
fonte
readdir(2)
é mais portátil. Isso me sugere que a resposta correta para a pergunta do OP é "Quando o XSI se tornou popular".