El ^Dcarácter (también conocido como \04o 0x4, FIN DE LA TRANSMISIÓN en Unicode) es el valor predeterminado para el eofparámetro de carácter de control especial del controlador de terminal o pseudo-terminal en el núcleo (más precisamente de la ttydisciplina de línea asociada al serial o pseudo- dispositivo tty ). Ese es el c_cc[VEOF]de la termiosestructura pasada a los TCSETS / TCGETS ioctluno cuestiones al dispositivo terminal para afectar el comportamiento del conductor.
El comando típico que envía esos ioctlses el sttycomando.
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 eofparámetro solo es relevante cuando el dispositivo terminal está en icanonmodo.
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 LFcarácter (de forma predeterminada, el controlador de terminal también traduce el CRenviado por su terminal Returna LF).
Ahora, si desea enviar lo que escribió hasta ahora sin presionar Enter, ahí es donde puede ingresar el eofcará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 readlo recibirá tal cual (y no incluirá un LFcará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, readdevolverá 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 eofcará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 icanonmodo 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 ^Dpersonaje (o lo que sea la eofconfiguración del terminal con algunos) el mismo significado (para significar eof).