Sí, un directorio en Unix es de hecho un archivo en el que está representado por un i-nodo (Ver inodo) en el sistema de archivos, al igual que cualquier otro archivo. La diferenciación de directorios y archivos ocurre en el hecho de que el campo de mode
del i-nodo (que almacena los permisos del archivo, así como el tipo) tiene un indicador de bit particular establecido para un directorio, que no está configurado para un archivo normal .
En notación simbólica, como se muestra en la salida de ls -l
, el modo para un directorio se mostrará como drwxrwxrwx
lugar de simplemente -rwxrwxrwx
.
Por lo tanto, aunque sería técnicamente preciso decir que un directorio es un archivo y, por lo tanto, los archivos se almacenan en archivos, sería un uso muy confuso. Y, el sistema operativo diferencia claramente entre los nodos-i para archivos normales y los nodos-i para otros objetos (como directorios, enlaces simbólicos, sockets, etc.).
- ¿Por qué son tan comunes los despidos masivos en empresas tecnológicas?
- ¿Por qué no podemos crear una mejor inteligencia artificial?
- Cómo mostrar el principio básico detrás de DMA (acceso directo a memoria)
- ¿Cuál se realizará antes, computadora cuántica o fusión controlada?
- ¿Son increíbles las IIT solo por la calidad de los estudiantes que hay allí? No es la facultad, la enseñanza, etc. (¿Jairam Ramesh tiene razón?)
El hecho de que todo sea un archivo se refiere solo a la implementación del sistema operativo y a cómo se puede acceder a estos objetos de manera similar utilizando las llamadas al sistema operativo. La diferencia entre estos objetos es clara y bien definida, y por lo tanto valida el uso de diferentes términos en lugar de llamarlos a todos como “archivos”.
El campo de modo del i-nodo
El campo de mode
tiene una longitud de 16 bits (pero se almacenará como un valor de 32 bits), de los cuales los 4 bits más significativos se utilizan para determinar el tipo de archivo. Los 9 bits menos significativos determinarán los permisos (los indicadores rwx
).
Puede obtener el valor del campo de mode
desde el nodo i mediante la llamada al sistema de stat
. Se puede llamar a stat
para todos los tipos de archivos, como archivos regulares, directorios, enlaces simbólicos, sockets, etc. Luego, puede probar si un “archivo” es un directorio utilizando la macro S_ISDIR
definida en el archivo de encabezado sys/stat.h
.
En una implementación de S_ISDIR
que encontré aquí (sys / stat.h Source), se define como
#define S_ISDIR(m) ((m & 0170000) == 0040000)
Si convertimos las constantes octales a hexadecimales, sería:
#define S_ISDIR(m) ((m & 0xF000) == 0x4000)
Puede convertir las constantes a binario y ver qué se está comprobando. El “archivo” se identificará como un directorio solo si los 4 MSB de los 16 bits del campo de modo (es decir, los bits 12-15) son 0100
.
Hay otras macros en sys/stat.h
para verificar si un archivo es un archivo normal ( S_ISREG
), cola FIFO ( S_ISFIFO
), Enlace simbólico ( S_ISLINK
), Socket ( S_ISSOCK
), etc.