Книга: Разработка приложений в среде Linux. Второе издание

16.5.8. Локальные флаги

16.5.8. Локальные флаги

Флаги локального режима влияют на локальную обработку, что в какой-то мере относится к способу сбора символов перед их выводом. Когда устройство находится в каноническом режиме (режиме с обработкой), символы отражаются локально без передачи в удаленную систему до тех пор, пока не встретится символ новой строки. На этом этапе передается вся строка, а удаленный конец обрабатывает ее без повторного отражения. В неформатируемом режиме каждый символ передается в удаленную систему в таком виде, в каком он принимается. Иногда символ отображается только удаленной системой, иногда только локальной, а иногда, например, при чтении пароля, он и вовсе не отображается.

Некоторые флаги могут вести себя иначе, в зависимости от того, в каком режиме находится терминал: каноническом или неформатируемом. Флаги, ведущие себя иначе в каноническом и неформатируемом режимах, отмечены.

Флаги, работающие на c_cflag, перечислены ниже.

ICANON При установке ICANON включается канонический режим. Если ICANON не установлен, включается неформатируемый режим.
ECHO При установке ECHO включается локальное эхо. Если ECHO не установлен, все остальные флаги, названия которых начинаются с ECHO, эффективно отключаются и функционируют так, как будто они все, кроме ECHONL, не установлены.
ECHOCTL При установке ECHOCTL управляющие символы выводятся как ^C, где С — это символ, формирующийся добавлением восьмеричного 0100 к управляющему символу, по модулю восьмеричного 0200. Поэтому Control-C отображается как ^C, a Control-? (восьмеричный 0177) отображается как ^?(? — это восьмеричный 77). Этот флаг в POSIX не определен.
ECHOE В каноническом режиме при установке ECHOE в случае получения символа ERASE предыдущий символ на дисплее по возможности стирается.
ECHOK и ECHOKE В каноническом режиме при получении символа KILL вся текущая строка стирается из буфера. Если не установлены ни ECHOK, ни ECHOKE, ни ECHOE, выводится представление символа KILL с помощью ECHOCTL(^U по умолчанию) для обозначения стертой строки. Если установлены ECHOE и ECHOK, но ECHOKE не установлен, выводится представление символа KILL с помощью ECHOCTL, сопровождаемое новой строкой, которая затем обрабатывается OPOST в случае установки OPOST. Если установлены ECHOE, ECHOK и ECHOKE, строка стирается. См. описание ECHOPRT для другой вариации на эту тему. Флаг ECHOKE в POSIX не определен. В системах без флага ECHOKE установка флага ECHOK может быть эквивалентна установке и ECHOK, и ECHOKE в Linux.
ECHONL В каноническом режиме при установке ECHONL символы новой строки ('n') отражаются даже в том случае, если ECHO не установлен.
ECHOPRT В каноническом режиме при установке ECHOPRT символы выводятся при стирании, когда принимаются символы ERASE или WERASE (или KILL, если установлены ECHOK и ECHOKE). Когда принимается первый в последовательности символ стирания, выводится , а при выводе последнего символа стирания (достигается конец строки или вводится нестертый символ), выводится /. Каждый вводимый вами нормальный символ просто отображается. Поэтому ввод asdf, сопровождаемый двумя символами ERASE, а также df и символом KILL, будет выглядеть следующим образом: asdffd/dffdsa/. Этот флаг полезен для отладки и использования документирующих терминалов вроде первоначального телетайпа, где символы печатаются на бумаге; в другом случае он не пригодится. Этот флаг в POSIX не определен.
ISIG Если установлен ISIG, управляющие символы INTR, QUIT и SUSP вызывают отправку соответствующего сигнала (SIGINT, SIGQUIT или SIGTSTP соответственно; см. главу 12) всем процессам в текущей группе процессов переднего плана на данном tty.
NOFLSH Обычно при получении символов INTR и QUIT очереди ввода и вывода сбрасываются. При установке NOFLSH очереди не сбрасываются.
TOSTOP Если установлен TOSTOP, то в том случае, когда процесс, не находящийся в текущей группе процессов переднего плана, пытается выполнить запись в свой управляющий терминал, передается SIGTTOU всей группе процессов, членом которой является данный процесс. По умолчанию этот сигнал останавливает процесс, как при нажатии комбинации клавиш, соответствующей символу SUSP.
IEXTEN Этот флаг описан в POSIX как определяемый реализацией. Он включает обработку символов ввода, определяемую реализацией. Хотя переносимые программы не устанавливают этот бит, IUCLC и определенные возможности стирания символов в Linux зависимы от его установки. К счастью, он чаще всего разрешен по умолчанию в системах Linux, поскольку ядро изначально разрешает его при установке tty, поэтому обычно не нужно устанавливать его по какой-либо причине.

Оглавление книги


Генерация: 1.337. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз