O caractere ^D
(também conhecido como ou 0x4) é o valor padrão para o parâmetro de caractere de controle especial
eof
do terminal ou driver de pseudo-terminal no kernel (mais precisamente do tty
linha disciplina anexada ao dispositivo serial ou pseudo-tty ). Essa é a c_cc[VEOF]
da estrutura termios
passada para os problemas TCSETS / TCGETS ioctl
one no dispositivo terminal para afetar o comportamento do driver.
O comando típico que envia os ioctls
é o comando stty
.
Para recuperar todos os parâmetros:
$ stty -a speed 38400 baud; rows 58; columns 191; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 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
Esse parâmetro eof
só é relevante quando o dispositivo terminal está no modo icanon
.
Nesse modo, o driver de terminal (não o emulador de terminal) implementa um editor de linhas muito simples, onde você pode digitar Backspace para apagar um caractere, Ctrl-U para apagar toda a linha ... Quando uma aplicação lê o dispositivo terminal, não vê nada até que você pressione Retornar ponto em que read()
retorna a linha completa incluindo o último caractere LF
(por padrão, o driver do terminal também traduz o CR
enviado pelo seu terminal ao Retornar para LF
).
Agora, se você quiser enviar o que você digitou até agora sem pressionar Enter , é aí que você pode inserir o caractere eof
. Ao receber esse caractere do emulador de terminal, o driver do terminal submete o conteúdo atual da linha, para que o aplicativo que faz o read
receba como está (e não incluirá um caractere LF
final).
Agora, se a linha atual estava vazia, e desde que o aplicativo tenha lido completamente as linhas inseridas anteriormente, o read
retornará 0 caractere.
Isso significa fim do arquivo para o aplicativo (quando você lê um arquivo, lê até que não haja mais nada para ler). É por isso que ele é chamado de caractere eof
, porque o envio faz com que o aplicativo veja que não há mais entrada disponível.
Agora, as shells modernas, em seu prompt, não configuram o terminal no modo icanon
porque implementam seu próprio editor de linhas , que é muito mais avançado que o driver de terminal integrado. No entanto, em seu próprio editor de linhas , para confundir os usuários, eles dão o caractere ^D
(ou qualquer que seja a configuração eof
do terminal com alguns) o mesmo significado (para significar eof
).