¿Está literalmente "terminando un archivo" al ingresar esta secuencia de escape, es decir, la sesión de shell interactiva es vista como un flujo de archivo real por el shell, como cualquier otro flujo de archivos? Si es así, ¿qué archivo?
¿O la señal Ctrl+ es Dsolo un marcador de posición que significa "el usuario ha terminado de proporcionar información y usted puede finalizar"?
shell
escape-characters
Geeb
fuente
fuente
set -o ignoreeof
para cambiar ese comportamiento.Respuestas:
El
^D
carácter (también conocido como\04
o 0x4, FIN DE LA TRANSMISIÓN en Unicode) es el valor predeterminado para eleof
parámetro de carácter de control especial del controlador de terminal o pseudo-terminal en el núcleo (más precisamente de latty
disciplina de línea asociada al serial o pseudo- dispositivo tty ). Ese es elc_cc[VEOF]
de latermios
estructura pasada a los TCSETS / TCGETSioctl
uno cuestiones al dispositivo terminal para afectar el comportamiento del conductor.El comando típico que envía esos
ioctls
es elstty
comando.Para recuperar todos los parámetros:
Ese
eof
parámetro solo es relevante cuando el dispositivo terminal está enicanon
modo.En ese modo, el controlador de terminal (no el emulador de terminal) implementa un editor de línea muy simple , donde puede escribir Backspacepara borrar un carácter, Ctrl-Upara borrar toda la línea ... Cuando una aplicación lee desde el dispositivo terminal, no ve nada hasta presiona Returnen qué punto
read()
devuelve la línea completa, incluido el últimoLF
carácter (de forma predeterminada, el controlador de terminal también traduce elCR
enviado por su terminal ReturnaLF
).Ahora, si desea enviar lo que escribió hasta ahora sin presionar Enter, ahí es donde puede ingresar el
eof
carácter. Al recibir ese carácter del emulador de terminal, el controlador de terminal envía el contenido actual de la línea, de modo que la aplicación que lo hagaread
lo recibirá tal cual (y no incluirá unLF
carácter final ).Ahora, si la línea actual estaba vacía, y siempre que la aplicación haya leído completamente las líneas ingresadas anteriormente,
read
devolverá el carácter 0.Eso significa el final del archivo para la aplicación (cuando lees desde un archivo, lees hasta que no hay nada más que leer). Es por eso que se llama el
eof
carácter, porque enviarlo hace que la aplicación vea que no hay más entradas disponibles.Ahora, los shells modernos, a su solicitud, no configuran el terminal en
icanon
modo porque implementan su propio editor de línea, que es mucho más avanzado que el controlador de terminal incorporado. Sin embargo, en su propio editor de línea , para evitar confundir a los usuarios, le dan al^D
personaje (o lo que sea laeof
configuración del terminal con algunos) el mismo significado (para significareof
).fuente
CTRL_D es solo una señal que dice que este es el final de una secuencia de texto. No termina un archivo con él, finaliza su flujo de entrada al escribirlo. Además, CTRL_D no representa ningún carácter o byte, como puede descubrir con la herramienta hexdump:
fuente