Diferencia entre descriptor de archivo y enlace físico o físico

Diferencia entre descriptor de archivo y enlace físico o físico

Si el enlace suave y el enlace físico apuntan a un archivo.

Y el descriptor de archivo es un identificador de archivo que apunta a un archivo abierto.

Entonces, ¿cuál es la diferencia exacta entre los dos si ambos son una especie de puntero a un archivo?

Además, el enlace físico apunta a la ubicación de la dirección del contenido del archivo y el descriptor del archivo también apunta al contenido del archivo, entonces lo que difiere exactamente aquí. El enlace físico también tiene sus propios descriptores de archivos.

Respuesta1

Filosóficamente, se puede argumentar que no son diferentes.

Pero son completamente diferentes en cuanto a por qué, dónde y cómo se utilizan e implementan.

En primer lugar, tanto los enlaces duros como los suaves/simbólicos son entradas de directorio, es decir, son entradas/registros en un archivo especialmente formateado llamado directorio, donde cada registro contiene un nombre y un número de inodo; este último se refiere a la estructura real que contiene el enlace. los metadatos del archivo (permisos, tamaño, etc.) y la lista de bloques de datos, estructura que se denomina "inodo".

La diferencia entre un enlace físico y uno simbólico es que mientras que el inodo al que apunta un enlace físico contiene los datos reales, el inodo al que apunta un enlace simbólico contiene la ruta a otro archivo. Básicamente, los enlaces simbólicos son en sí mismos.duroenlaces que apuntan a un tipo especial de archivo, como canalizaciones con nombre, archivos de socket de dominio Unix, etc.

Ahora, cuando el kernel abre un archivo, crea una estructura en memoria que duplica el inodo del disco y contiene algunos de los mismos metadatos (permisos, lista de bloques que contienen datos, tamaño, etc.). Esta estructura es apuntada por otra estructura llamada "descripción de archivo abierto" (que contiene cosas como el puntero de posición, si el archivo se abrió en modo lectura-escritura o de solo lectura, si debe leerse y escribirse en modo sin bloqueo). modo, etc.). Finalmente, esta estructura es apuntada por una entrada en otra estructura del núcleo (por proceso), una matriz/tabla llamada tabla de descriptores de archivos.

El "descriptor de archivo", el número entero devuelto por llamadas al sistema como open(2), es un índice de esta tabla.

Un inodo en memoria puede ser señalado por múltiples "descripciones de archivos abiertos", que a su vez pueden ser señalados por múltiples descriptores de archivos, desde múltiples procesos.

Algunas de las llamadas al sistema como open(2) tratarán los enlaces simbólicos de manera especial: cuando el archivo que están abriendo resulta ser un enlace simbólico, continúan intentando abrir el archivo nombrado por la ruta que es su contenido.

Tanto las estructuras del disco (directorios, inodos) como las estructuras del núcleo/memoria (inodos, descripciones de archivos abiertos) utilizan el recuento de referencias para realizar un seguimiento de cuál está utilizando cuál. (No, no hay ningún recolector de basura de marca y barrido en el kernel que salte a través de punteros en la memoria o en el disco para determinar a qué objetos ya no se hace referencia desde ningún otro lugar ;-)).

información relacionada