Как комбинация клавиш становится сигналом (в ядре, клиентском приложении, во время выполнения)?
Этот перевод выполняется как часть дисциплины линии TTY ядра . Существует ряд других переводов, выполняемых в рамках этого процесса, таких как конец файла (^ D), сигнализация остановки (^ Z), символьное эхо, редактирование базовой строки (backspace, ^ U и т. Д.) И DEL / Перевод BS и CR / CRLF.
Нажатие клавиши все еще прошло? Если CTRL-C имеет нулевой обработчик, STDIN все еще получает CTRL-C?
Нет. Управляющие символы, которые обрабатываются дисциплиной строки, не передаются на передний план процесса.
Как лучше всего не интерпретировать нажатие клавиш как комбинацию сигналов? Это можно сделать в настройках TTY или Environment?
Используйте tcgetattr()
и tcsetattr()
для изменения атрибутов терминала. Элемент c_cc
в struct termios
содержит настройки для управляющих символов; Вы можете отключить некоторые или все элементы, установив их на _POSIX_VDISABLE
.
(Вы также можете использовать cfmakeraw()
- задокументировано на той же странице, что и выше - для очистки большинства элементов struct termios
, что дает вам в основном «сырой» терминал. Однако, это может отключить больше режимов работы терминала, чем вы ожидаете.)