Il ^D
carattere (noto anche come \04
o 0x4, END OF TRANSMISSION in Unicode) è il valore predefinito per il eof
parametro del carattere di controllo speciale del driver terminale o pseudo-terminale nel kernel (più precisamente della tty
disciplina di linea collegata al seriale o pseudo- dispositivo tty ). Questo è il c_cc[VEOF]
della termios
struttura passata alle TCSETS / TCGETS ioctl
uno problemi al dispositivo terminale di influenzare il comportamento del conducente.
Il comando tipico che invia quelli ioctls
è il stty
comando.
Per recuperare tutti i parametri:
$ stty -a
velocità 38400 baud; file 58; colonne 191; linea = 0;
intr = ^ C; quit = ^ \; cancella = ^ ?; kill = ^ U; eof = ^ D ; eol = <undef>; eol2 = <undef>; swtch = <undef>; inizio = ^ Q; stop = ^ S; susp = ^ Z; rprnt = ^ R; werase = ^ W; lnext = ^ V; flush = ^ O;
min = 1; tempo = 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
Tale eof
parametro è rilevante solo quando il dispositivo terminale è in icanon
modalità.
In quella modalità, il driver terminale (non l'emulatore di terminale) implementa un editor di linee molto semplice , in cui è possibile digitare Backspaceper cancellare un carattere, Ctrl-Uper cancellare l'intera riga ... Quando un'applicazione legge dal dispositivo terminale, non vede nulla fino a quando si preme Returna questo punto la read()
linea completo, compreso l'ultimo rendimenti LF
carattere (per impostazione predefinita, il driver di terminale si traduce anche l' CR
inviato dal terminale al momento Returna LF
).
Ora, se vuoi inviare ciò che hai digitato finora senza premere Enter, è qui che puoi inserire il eof
personaggio. Dopo aver ricevuto quel carattere dall'emulatore di terminale, il driver del terminale invia il contenuto corrente della linea, in modo che l'applicazione che lo esegue read
su di esso lo riceverà così com'è (e non includerà un LF
carattere finale ).
Ora, se la riga corrente era vuota e se l'applicazione avrà letto completamente le righe immesse in precedenza, read
restituirà 0 caratteri.
Ciò significa la fine del file per l'applicazione (quando leggi da un file, leggi fino a quando non c'è più nulla da leggere). Ecco perché si chiama il eof
personaggio, perché l'invio causa l'applicazione per vedere che non è più disponibile alcun input.
Ora, le shell moderne, al loro prompt non impostano il terminale in icanon
modalità perché implementano il proprio editor di linee che è molto più avanzato di quello integrato nel driver del terminale. Tuttavia, nel loro editor di linee , per evitare di confondere gli utenti, danno al ^D
personaggio (o qualunque sia l' eof
impostazione del terminale con alcuni) lo stesso significato (per significare eof
).