Muitas entidades nos sistemas operacionais no estilo * nix (e outros) são consideradas arquivos ou têm um aspecto definidor de arquivo, mesmo que não sejam necessariamente uma sequência de bytes armazenados em um sistema de arquivos. Exatamente como os diretórios são implementados depende do tipo de sistema de arquivos, mas geralmente o que eles contêm, considerado como uma lista, é uma sequência de bytes armazenados, portanto, nesse sentido, eles não são tão especiais.
Uma maneira de definir o que é um "arquivo" em um contexto * nix é que ele possui um descritor de arquivo associado a ele. De acordo com o artigo da Wikipedia, um descritor de arquivo
é um indicador abstrato usado para acessar um arquivo ou outro recurso de entrada / saída , como um cano ou conexão de rede ...
Em outras palavras, eles se referem a vários tipos de recursos de / para os quais uma sequência de bytes pode ser lida / gravada, embora a origem / destino dessa sequência não seja especificada. Em outras palavras, o "onde" do recurso pode ser qualquer coisa. O que define é que é um canal de informação. Isso é parte do motivo de se dizer às vezes que no unix "tudo é um arquivo". Você não deve interpretar isso completamente literalmente, mas vale a pena considerar seriamente. No caso de um diretório, essas informações pertencem ao que está no diretório e, em um nível inferior de implementação, como localizá-las no sistema de arquivos.
Diretórios são meio especiais nesse sentido, porque no código C nativo eles não são ostensivamente associados a um descritor de arquivo; a API POSIX usa um tipo especial de identificador de fluxo DIR*
,. No entanto, esse tipo tem de fato um descritor subjacente que pode ser recuperado . Os descritores são gerenciados pelo kernel e acessá-los sempre envolve chamadas de sistema, portanto, outro aspecto do que é um descritor é que ele é um canal controlado pelo kernel do sistema operacional. Eles têm números únicos (por processo) começando com 0, que geralmente é o descritor para o fluxo de entrada padrão .