A frase " Tudo é um arquivo " define a arquitetura do sistema operacional. Isso significa que tudo no sistema a partir de processos, arquivos, diretórios, sockets, pipes, ... é representado por um descritor de arquivos abstraído do camada de sistema de arquivos virtual no kernel. O arquivo virtual é uma interface fornecida pelo kernel. Daí a frase foi corrigida para dizer " Tudo é um descritor de arquivo ". O próprio Linus Torvalds corrigiu-o novamente com um pouco mais de precisão: " Tudo é um fluxo de bytes ".
No entanto, cada "arquivo" também tem um proprietário e permissões que você pode conhecer de arquivos e diretórios comuns. Portanto, ferramentas clássicas do Unix, como cat, ls, ps, ... podem consultar todos esses "arquivos" e não é necessário inventar outros mecanismos especiais, além das simples ferramentas antigas, que usam a chamada do sistema read()
. Por exemplo, na família de sistemas operacionais da Microsoft, existem várias chamadas diferentes do sistema read()
(ouvi aproximadamente 15) para qualquer tipo de arquivo e cada uma delas é um pouco diferente. Quando tudo é um arquivo, você não precisa disso.
Para sua pergunta : Claro que existem arquivos diferentes tipos . No linux existem 7 tipos de arquivo . O diretório é um deles. Mas os utilitários podem distingui-los uns dos outros. Por exemplo, a função completa do comando cd
(quando você pressiona TAB ) lista apenas diretórios, porque a chamada do sistema stat()
(consulte man 2 stat
) retorna uma estrutura com um campo chamado% código%. O padrão POSIX define o que esse campo pode conter:
S_ISREG(m) is it a regular file?
S_ISDIR(m) directory?
S_ISCHR(m) character device?
S_ISBLK(m) block device?
S_ISFIFO(m) FIFO (named pipe)?
S_ISLNK(m) symbolic link? (Not in POSIX.1-1996.)
S_ISSOCK(m) socket? (Not in POSIX.1-1996.)
A função de conclusão do comando st_mode
exibe apenas "arquivos" onde o sinalizador cd
está definido.