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.
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).
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.)
cfmakeraw() . Páginas do manual do NetBSD. 2004.