Evita que a disciplina de linha manipule caracteres de controle

0

Quando você envia um caractere de controle do terminal, por exemplo, se você pressionou Ctrl+C , a disciplina de linha receberá o byte que representa esse caractere de controle (que é 0x03 no caso de Ctrl+C ).

Agora, em vez da disciplina de linha enviar o byte 0x03 para o programa associado ao terminal, ele irá enviar o sinal SIGINT (ou ele fará alguma outra ação se é um personagem de controle diferente).

Agora existe uma maneira de evitar que a disciplina de linha manipule caracteres de controle, então o que eu quero é que o programa associado ao terminal receba os bytes reais que representam os caracteres de controle ( 0x03 no nosso caso).

    
por Joseph 28.10.2017 / 08:19

2 respostas

1

No linux, você usaria

$ stty intr undef

no terminal em questão. Isso define o caractere de interrupção como nada ("undef"). Para restaurar você usaria

$ stty intr ^c

Veja man stty para detalhes.

    
por 28.10.2017 / 08:34
1

different control character […] control characters

Eu anoto o plural. Você está procurando o modo de entrada não-canônico , conhecido antes do padrão POSIX como modo raw . Este é o modo que os aplicativos que usam GNU Readline, ZLE ou libedit utilizam. O código deles define isso com as funções da biblioteca tcgetattr() , cfmakeraw() e tcsetattr() , ou similar. Estes são também os alicerces de stty raw . (Observe a existência de stty sane se você jogar com isso.)

Leitura adicional

por 28.10.2017 / 10:19