El concepto del identificador de archivos es importante debido a la elección de diseño de UNIX de que "todo es un archivo", incluidas las cosas que no forman parte del sistema de archivos. Como unidades de cinta, el teclado y la pantalla (¡o teletipo!), Lectores de tarjetas / cintas perforadas, conexiones en serie, conexiones de red y (la invención clave de UNIX) conexiones directas a otros programas llamados "tuberías".
Si observa muchas de las simples utilidades estándar de UNIX como grep
, especialmente en sus versiones originales, notará que no incluyen llamadas a open()
y close()
sino solo read
y write
. El shell configura los identificadores de archivos fuera del programa y los pasa cuando se inicia. Por lo tanto, el programa no tiene que preocuparse si está escribiendo en un archivo o en otro programa.
Así como open
, las otras formas de obtener los descriptores de fichero son socket
, listen
, pipe
, dup
, y un mecanismo muy Heath Robinson para el envío de descriptores de archivos a través de canalizaciones: https://stackoverflow.com/questions/28003921/sending-file-descriptor-by-linux -enchufe
Editar: algunas notas de clase que describen las capas de indirección y cómo esto le permite a O_APPEND trabajar con sensatez. Tenga en cuenta que mantener los datos del inodo en la memoria garantiza que el sistema no tendrá que ir a buscarlos nuevamente para la próxima operación de escritura.