O ^Dcaractere (também conhecido como \04ou 0x4, END OF TRANSMISSION em Unicode) é o valor padrão para o eofparâmetro de caractere de controle especial do terminal ou driver do pseudo-terminal no kernel (mais precisamente da ttydisciplina de linha anexada ao serial ou pseudo- dispositivo tty ). Essa é a c_cc[VEOF]da termiosestrutura passado para os TCSETS / TCGETS ioctlum problemas para o dispositivo terminal de afetar o comportamento do condutor.
O comando típico que envia esses ioctlsé o sttycomando.
Para recuperar todos os parâmetros:
$ stty -a
velocidade 38400 baud; linhas 58; colunas 191; linha = 0;
intr = ^ C; sair = ^ \; apagar = ^ ?; matar = ^ U; eof = ^ D ; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^ Q; parar = ^ S; susp = ^ Z; rprnt = ^ R; werase = ^ W; proxima = ^ 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
Esse eofparâmetro é relevante apenas quando o dispositivo terminal está no icanonmodo.
Nesse modo, o driver do terminal (não o emulador de terminal) implementa um editor de linhas muito simples , onde você pode digitar Backspacepara apagar um caractere, Ctrl-Uapagar toda a linha ... Quando um aplicativo lê no dispositivo do terminal, ele não vê nada até você pressiona o Returnponto em que read()retorna a linha completa, incluindo o último LFcaractere (por padrão, o driver do terminal também traduz o CRenviado pelo seu terminal Returnpara LF).
Agora, se você deseja enviar o que você digitou até agora sem pressionar Enter, é aí que você pode inserir o eofcaractere. Ao receber esse caractere do emulador de terminal, o driver do terminal envia o conteúdo atual da linha, para que o aplicativo que readestiver fazendo o recebimento o receba como está (e não inclua um LFcaractere à direita ).
Agora, se a linha atual estava vazia e desde que o aplicativo tenha lido completamente as linhas inseridas anteriormente, o readcaractere retornará 0.
Isso significa o fim do arquivo para o aplicativo (quando você lê um arquivo, você lê até que não haja mais nada a ser lido). É por isso que é chamado de eofpersonagem, porque enviá-lo faz com que o aplicativo veja que não há mais entrada disponível.
Agora, os shells modernos, quando solicitados, não configuram o terminal no icanonmodo porque implementam seu próprio editor de linha, que é muito mais avançado do que o driver de terminal incorporado. No entanto, em seu próprio editor de linha , para evitar confundir os usuários, eles dão ao ^Dpersonagem (ou qualquer que seja a eofconfiguração do terminal com alguns) o mesmo significado (para significar eof).