Los cuatro /dev/fd/0
, /dev/stdin
, /proc/self/fd/0
y /dev/pts/2
son los nombres de archivo, como lo son /////dev/../dev/fd//0
, /bin/sh
, /etc/fstab
, /fioejfoeijf
, etc. Todos menos que el último ejemplo, es probable que sea el nombre de un archivo existente en su máquina. Un nombre de archivo es una cadena que puede designar un archivo en su sistema de archivos; bajo Linux, cualquier cadena que no contenga un byte nulo y que tenga una longitud máxima de 4096 bytes es un nombre de archivo válido. Muchos de estos nombres son equivalentes, por ejemplo, /bin/sh
es equivalente a ///bin/sh
, /bin/../bin/sh
(suponiendo que /bin
es un directorio existente), etc. Todos los ejemplos que he dado hasta ahora son los nombres de archivo absolutos; También hay nombres de archivo relativos, que no comienzan con ay /
cuyo significado depende del directorio actual.
La terminología que rodea los nombres de archivo no es universal; a veces "nombre de archivo" significa una ruta completa a un archivo, y a veces significa el nombre de una entrada de directorio. La terminología POSIX es " nombre de archivo " o " componente de nombre de ruta " para el nombre de una entrada de directorio y " nombre de ruta " para una ruta completa.
Un descriptor de archivo designa un archivo abierto en un proceso particular. El kernel mantiene una tabla de descriptores de archivo para cada proceso. Cada entrada en la tabla de descriptores de archivos indica qué hacer si el proceso solicita lectura, escritura y otras operaciones en el descriptor de archivos.
Los descriptores de archivo pueden corresponder a un archivo y tener un nombre asociado, pero no todos lo hacen. Para aquellos que lo hacen, el archivo puede ser un archivo normal, un directorio, un archivo de dispositivo o una tubería con nombre (también llamado FIFO) (el tipo creado por mkfifo
); Algunos sistemas tienen más posibilidades, como enchufes y puertas Unix. Los ejemplos de descriptores de archivo que no tienen un archivo con nombre asociado incluyen tuberías (del tipo creado por pipe
) y tomas de red .
/dev/fd/0
, /dev/stdin
y /proc/self/fd/0
son nombres de archivo (todos equivalentes) con un significado peculiar: todos designan el archivo al que se accede actualmente mediante el descriptor de archivo 0. Cuando un proceso abre estos, el núcleo copia la entrada con el índice 0 en la tabla de descriptores de descriptor de archivo a una nueva descriptor Abrir cualquiera de estos archivos es equivalente a llamar dup(0)
. Los archivos nombrados son una forma indirecta de obtener un proceso para usar uno de sus archivos ya abiertos en lugar de abrir un nuevo archivo; son principalmente útiles para pasar la línea de comando de un programa, donde el programa espera que se abra el nombre de un archivo.