El ^D
carácter (también conocido como \04
o 0x4, FIN DE LA TRANSMISIÓN en Unicode) es el valor predeterminado para el eof
parámetro de carácter de control especial del controlador de terminal o pseudo-terminal en el núcleo (más precisamente de la tty
disciplina de línea asociada al serial o pseudo- dispositivo tty ). Ese es el c_cc[VEOF]
de la termios
estructura pasada a los TCSETS / TCGETS ioctl
uno cuestiones al dispositivo terminal para afectar el comportamiento del conductor.
El comando típico que envía esos ioctls
es el stty
comando.
Para recuperar todos los parámetros:
$ stty -a
velocidad 38400 baudios; filas 58; columnas 191; línea = 0;
intr = ^ C; salir = ^ \; borrar = ^ ?; matar = ^ U; eof = ^ D ; eol = <undef>; eol2 = <undef>; swtch = <undef>; inicio = ^ Q; detener = ^ S; susp = ^ Z; rprnt = ^ R; werase = ^ W; lnext = ^ V; rubor = ^ O;
min = 1; tiempo = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Ese eof
parámetro solo es relevante cuando el dispositivo terminal está en icanon
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 último LF
carácter (de forma predeterminada, el controlador de terminal también traduce el CR
enviado por su terminal Returna LF
).
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 haga read
lo recibirá tal cual (y no incluirá un LF
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 la eof
configuración del terminal con algunos) el mismo significado (para significar eof
).