Muchas entidades en los sistemas operativos de estilo * nix (y otros) se consideran archivos, o tienen un aspecto definitorio similar a un archivo, a pesar de que no son necesariamente una secuencia de bytes almacenados en un sistema de archivos. Exactamente cómo se implementan los directorios depende del tipo de sistema de archivos, pero en general lo que contienen, considerado como una lista, es una secuencia de bytes almacenados, por lo que en ese sentido no son tan especiales.
Una forma de definir qué es un "archivo" en un contexto * nix es que es algo que tiene un descriptor de archivo asociado. Según el artículo de Wikipedia, un descriptor de archivo
es un indicador abstracto que se usa para acceder a un archivo u otro recurso de entrada / salida , como una tubería o una conexión de red ...
En otras palabras, se refieren a varios tipos de recursos desde / hacia los cuales se puede leer / escribir una secuencia de bytes, aunque el origen / destino de esa secuencia no está especificado. Dicho de otra manera, el "dónde" del recurso podría ser cualquier cosa. Lo que lo define es que es un conducto de información. Esto es parte de por qué a veces se dice que en unix "todo es un archivo". No debe tomar eso completamente literalmente, pero vale la pena considerarlo seriamente. En el caso de un directorio, esta información se refiere a lo que está en el directorio y, en un nivel inferior de implementación, cómo encontrarlo dentro del sistema de archivos.
Los directorios son algo especiales en este sentido porque en el código C nativo no están aparentemente asociados con un descriptor de archivo; la API POSIX utiliza un tipo especial de referencia de flujo, DIR*
. Sin embargo, este tipo tiene un descriptor subyacente que se puede recuperar . Los descriptores son administrados por el núcleo y acceder a ellos siempre involucra llamadas del sistema, por lo tanto, otro aspecto de lo que es un descriptor es que es un conducto controlado por el núcleo del sistema operativo. Tienen números únicos (por proceso) que comienzan con 0, que generalmente es el descriptor de la secuencia de entrada estándar .