Por que duas pressões ^ D são necessárias para sair de 'gato'? [duplicado]

12

Vamos executar cat e depois digitar a then ^D - você verá que cat não saiu.

Compare com cat + a + Enter + ^D - agora o gato saiu.

Então, por que duas impressoras ^D são necessárias para sair de cat no primeiro caso e apenas um ^D no segundo caso?

    
por Igor Liferenko 09.07.2017 / 02:05

1 resposta

24

A resposta pode ser encontrada na página termios(3) man:

   VEOF   (004, EOT, Ctrl-D) End-of-file character (EOF).  More precisely:
          this character causes the pending tty buffer to be sent  to  the
          waiting  user program without waiting for end-of-line.  If it is
          the first character of the line, the read(2) in the user program
          returns  0, which signifies end-of-file.  Recognized when ICANON
          is set, and then not passed as input.

O primeiro ^D que você pressiona faz com que a linha que você digitou seja entregue ao cat , para obter um resultado read(2) de a (um caractere, nenhum caractere EOL). O segundo ^D faz com que read(2) retorne 0, o que significa EOF para cat .

    
por 09.07.2017 / 03:28

Tags