Канонический по сравнению с неканоническим терминальным входом

39
задан Lance Roberts 19 February 2013 в 04:06
поделиться

1 ответ

Для канонического входа — думают оболочка; на самом деле думайте хорошая старомодная Оболочка Bourne, так как у Bash и родственников есть редактирование командной строки. Вы вводите строку входа; если Вы делаете ошибку, Вы используете символ удаления (значением по умолчанию является Клавиша Backspace , обычно; иногда Удаляют ) стереть предыдущий символ. Если Вы портите полностью, можно отменить целую строку со строкой, уничтожают символ (не полностью стандартизированный, часто Управление-X ). В некоторых системах Вы получаете стирание слова с Управление-W . Все это - канонический вход. Вся строка собрана и отредактирована вплоть до конца символа строки — Возврат — нажимается. Вслед за этим целая строка сделана доступной для программ ожидания. В зависимости от read() системные вызовы, которые являются выдающимися, целая строка, будут доступны, чтобы быть считанными (одним или несколькими вызовами к read()).

Для неканонического входа — думайте vi или vim или безотносительно — Вы нажимаете символ, и это сразу доступно программе. Вы не считаетесь вплоть до Вас возвратом хита. Система не делает никакого редактирования символов; они сделаны доступными для программы, как только они вводятся. Это до программы для интерпретации вещей соответственно. Теперь, vim действительно делает много вещей, которые немного походят на канонический вход. Например, клавиша Backspace перемещается назад, и в режиме ввода стирает то, что было там. Но поэтому vim принимает решение заставить его вести себя как этот.

Канонический и неканонический вывод является намного менее серьезным бизнесом. Существует несколько остатков различия, связанного с вещами как то, повторить ли возврат каретки перед переводом строки, и сделать ли задержки (не необходимый с электроникой; важный в дни, когда устройство вывода, возможно, было телетайпом на 110 бодов). Это может также сделать, вещам нравится дескриптор нечувствительные к регистру устройства вывода — телетайпы, снова. Строчные буквы производятся в ограничениях и прописных буквах как обратная косая черта и ограничения.

Это раньше было, что при вводе всех прописных букв к приглашению ко входу в систему, затем программа входа в систему автоматически преобразовала бы в режим, где все заглавные буквы были произведены с обратной косой чертой перед каждым фактическим капиталом. Я подозреваю, что это больше не делается на электронных терминалах.

<час>

В комментарии, TitaniumDecoy спросил:

Так с неканоническим входом, входной буфер обойден полностью? Кроме того, где протоколы работы линии входят?

С неканоническим входом, входной буфер все еще используется; если нет никакой программы с read() ожидание вызова для входа от терминала, символы сохранены во входном буфере. То, чего не происходит, является любым редактированием входного буфера.

Протоколы работы линии являются вещами как набор манипуляций, которые делает входное редактирование. Так, один аспект протокола работы линии - то, что символ удаления стирает предшествующий символ в каноническом режиме ввода. Если Вы имеете icase (входное отображение случая) набор, то символы верхнего регистра отображаются на нижнем регистре, если не предшествуется обратной косой чертой; это - протокол работы линии, я верю, или аспект протокола работы линии.

<час>

я забыл упоминать, что EOF, обрабатывающий ( Управление-D ), обрабатывается в каноническом режиме; это на самом деле означает, 'делают накопленный вход доступным для read()'; если не будет никакого накопленного входа (если Вы введете Управление-D в начале строки), то эти read() возвратит нулевые байты, который затем интерпретируется как EOF программами. Конечно, можно весело ввести больше символов на клавиатуре после этого, и программы, которые игнорируют EOF (или работают в неканоническом режиме) будут довольно счастливы.

, Конечно, в каноническом режиме, символы, введенные на клавиатуре, обычно отражаются на экран; можно управлять, происходит ли то повторение. Однако это является несколько тангенциальным к каноническому входу; нормальное редактирование происходит, даже когда эхо выключено.

Точно так же прерывание и сигналы выхода являются артефактами канонической обработки режима. Так также сигналы управления заданиями, такие как Управление-Z , чтобы приостановить текущий процесс и возвратиться к оболочке. Аналогично, управление потоком ( Средства управления , Управление-Q , чтобы остановиться и запустить вывод) обеспечивается каноническим режимом.

Глава 4 Rochkind Усовершенствованное Программирование Unix, 2-й Edn покрывает терминал ввод-вывод и дает большую часть этой информации — и многое другое. Другие книги программирования UNIX (по крайней мере, хорошие) будут также касаться его.

80
ответ дан Jonathan Leffler 27 November 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: