En Unix y Unix-como sistemas informáticos operativos, un descriptor de archivo ( FD , menos frecuentemente Fildes ) es un identificador único ( mango ) para un archivo u otro de entrada / salida de recursos , tales como un tubo o conector de red .
Los descriptores de archivo suelen tener valores enteros no negativos, y los valores negativos se reservan para indicar "sin valor" o condiciones de error.
Los descriptores de archivo son parte de la API POSIX . Cada proceso Unix (excepto quizás los demonios ) debe tener tres descriptores de archivo POSIX estándar, correspondientes a los tres flujos estándar :
En la implementación tradicional de Unix, los descriptores de archivos se indexan en un proceso por tabla de descriptor de archivos mantenida por el kernel, que a su vez indexa en una tabla de archivos abiertos por todos los procesos en todo el sistema, llamadatabla de archivos . Esta tabla registra elmodocon el que se abrió el archivo (u otro recurso): para leer, escribir, agregar y posiblemente otros modos. También indexa en una tercera tabla llamadatabla de inodoque describe los archivos subyacentes reales. [3] Para realizar entrada o salida, el proceso pasa el descriptor de archivo al kernel a través de unallamada al sistema, y el kernel accederá al archivo en nombre del proceso. El proceso no tiene acceso directo al archivo o tablas de inodo.
En Linux , se puede acceder al conjunto de descriptores de archivos abiertos en un proceso en la ruta /proc/PID/fd/
, donde PID es el identificador del proceso .
En sistemas similares a Unix, los descriptores de archivos pueden hacer referencia a cualquier tipo de archivo Unix nombrado en un sistema de archivos. Además de los archivos normales, esto incluye directorios , dispositivos de bloques y caracteres (también llamados "archivos especiales"), sockets de dominio Unix y canalizaciones con nombre . Los descriptores de archivos también pueden hacer referencia a otros objetos que normalmente no existen en el sistema de archivos, como tuberías anónimas y sockets de red .