Драйвер терминала в ядре может быть установлен в нескольких режимах (на самом деле флагов гораздо больше, чем этот, и в наши дни "cbreak" фактически противоположен другому флагу, так что это упрощено).
Режим «cbreak» означает, что процесс, который пытается прочитать с терминала, получит ввод с клавиатуры, как только он станет доступен.Когда режим cbreak выключен, данные хранятся ядром в буфере до нажатия клавиши Enter, а ядром обрабатываются определенные клавиши, такие как backspace (когда вы нажимаете backspace, он удаляет символ из буфера и - если режим echoon - записывает «backspace-space-backspace» в терминал, чтобы перезаписать символ пробелом.)
Режим эха означает, что всякий раз, когда пользователь нажимает клавишу, ядро немедленно возвращает его обратно на экран.,Когда он выключен, на экран ничего не выводится, и программе потребуется записать его в терминал, если он хочет, чтобы вы его видели.
Существует несколько типичных ситуаций:
- В программах, которые выполняют расширенную обработку ввода (например, большинство оболочек или что-то вроде полноэкранной программы), cbreak включен, а echo выключен;программа запишет символ в сам терминал, если он не является частью escape-последовательности специального ключа.
- В большинстве ситуаций [по умолчанию используется простая программа, которая читает stdin и пишет stdout], echo включен иCbreak выключен.Когда вы печатаете, он ведет себя так, как я описал выше, все это обрабатывается ядром до тех пор, пока вы не нажмете Enter и не отправит его в приложение.Редактирование ввода ограничено backspace [и ctrl-u, ctrl-w], попытка использовать клавиши со стрелками просто поместит escape-последовательности, такие как
^[[D
, в строку ввода. - При чтении пароля echoвыключен и cbreak выключен.Ввод работает так же, как и в случае по умолчанию, за исключением того, что ядро не копирует ввод на экран.
Запущенная программа сообщает ядру, в каком режиме он должен работать с функциями termios
.Вы можете использовать команду stty
, чтобы сделать то же самое в среде оболочки, но имейте в виду, что это может повлиять на собственную обработку ввода оболочки или на то, какие программы, которые вы запускаете, ожидают состояние по умолчанию.