O ^D
caractere (também conhecido como \04
ou 0x4, END OF TRANSMISSION em Unicode) é o valor padrão para o eof
parâmetro de caractere de controle especial do terminal ou driver do pseudo-terminal no kernel (mais precisamente da tty
disciplina de linha anexada ao serial ou pseudo- dispositivo tty ). Essa é a c_cc[VEOF]
da termios
estrutura passado para os TCSETS / TCGETS ioctl
um problemas para o dispositivo terminal de afetar o comportamento do condutor.
O comando típico que envia esses ioctls
é o stty
comando.
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 eof
parâmetro é relevante apenas quando o dispositivo terminal está no icanon
modo.
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 LF
caractere (por padrão, o driver do terminal também traduz o CR
enviado 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 eof
caractere. Ao receber esse caractere do emulador de terminal, o driver do terminal envia o conteúdo atual da linha, para que o aplicativo que read
estiver fazendo o recebimento o receba como está (e não inclua um LF
caractere à direita ).
Agora, se a linha atual estava vazia e desde que o aplicativo tenha lido completamente as linhas inseridas anteriormente, o read
caractere 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 eof
personagem, 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 icanon
modo 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 ^D
personagem (ou qualquer que seja a eof
configuração do terminal com alguns) o mesmo significado (para significar eof
).