
Un shell en Linux (por ejemplo:) bash
tiene sus stdin
descriptores de archivos stdout
y stderr
apuntan al mismo archivo de dispositivo; por ejemplo, los siguientes son los descriptores de archivos stdin
y para :stdout
stderr
bash
Ahora /dev/tty1
no es un archivo "real" en el que pueda leer y escribir, es un archivo de dispositivo que apunta a un archivo o a un búfer en la memoria o a otra cosa.
Ahora mi pregunta es: ¿ /dev/tty1
apunta a un solo archivo o a dos archivos?
Lo que quiero decir es que, cuando bash
se lee desde /dev/tty1
( stdin
) y cuando bash
se escribe en /dev/tty1
( stdout
o stderr
), ¿se lee y se escribe en elmismo archivo, ¿o /dev/tty1
apunta a dos archivos, uno se usa cuando se lee desde /dev/tty1
y el otro se usa cuando se escribe /dev/tty1
?
Respuesta1
Un nodo de dispositivo apunta a un solodispositivo, que en Linux es manejado por el kernel. Cuando bash
lee desde /dev/tty1
, lee desde el controlador del dispositivo que administra el primer terminal; cuando escribe en él, escribe en el mismo controlador de dispositivo.
Respuesta2
Un archivo de dispositivo no "apunta a varios archivos". Un archivo de dispositivo ni siquiera “apunta” a un solo archivo. Un archivo de dispositivo apunta a un controlador. El controlador contiene código que maneja operaciones de lectura y escritura.
No tiene por qué haber una relación entre los datos que se leen desde el dispositivo y los datos que se escriben. Algunos dispositivos tienen uno, otros no. Por ejemplo, con un disco, los datos que se leen en una determinada posición son los datos que se escribieron previamente en esa posición. Por otro lado, con un puerto serie, los datos escritos en el dispositivo se envían por la línea serie y los datos leídos desde el dispositivo se reciben por la línea serie; lo que se envía es independiente de lo que se recibe.
Un terminal es muy parecido a un dispositivo serie. De hecho, históricamente los terminales físicos solían estar conectados a través de líneas serie. Cuando una aplicación lee un archivo de terminal, recibe datos enviados por el controlador de terminal o por el emulador de terminal: el controlador/emulador de terminal escribe la entrada en su lado del terminal, la aplicación lee la entrada desde su lado del terminal. Cuando una aplicación escribe en un archivo de terminal, envía datos que luego son leídos por el controlador de terminal o por el emulador de terminal: la aplicación escribe la salida en su lado del terminal, el controlador/emulador de terminal lee la salida en su lado del terminal .