Muitas entidades em sistemas operacionais de estilo * nix (e outros) são consideradas arquivos ou têm um aspecto semelhante a um arquivo de definição, mesmo que não sejam necessariamente uma seqüê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 seqüência de bytes armazenados, então nesse sentido eles não são tão especiais.
Uma maneira de definir o que um "arquivo" está em um contexto * nix é que ele é algo que tem um arquivo descritor associado a ele. De acordo com o artigo da wikipedia, um descritor de arquivo
is an abstract indicator used to access a file or other input/output resource, such as a pipe or network connection...
Em outras palavras, eles se referem a vários tipos de recursos de / para os quais uma seqüê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 poderia ser qualquer coisa. O que define é que é um canal de informação. Isso é parte do porque às vezes é dito que no unix "tudo é um arquivo". Você não deve aceitar isso 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 de implementação mais baixo, como encontrá-lo no sistema de arquivos.
Os diretórios são um pouco 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 de fato tem um descritor subjacente que pode ser recuperado . Os descritores são gerenciados pelo kernel e acessá-los sempre envolve chamadas do sistema, portanto, outro aspecto do que um descritor é é que é um canal controlado pelo kernel do sistema operacional. Eles têm números únicos (por processo) começando com 0, que geralmente é o descritor do fluxo padrão .