[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Локальные режимы - c_lflag
Поле c_lflag используется для управления обработкой строк. Базовые
средства (0) предоставляют следующие функции управления.
Если установлен ISIG, все вводимые символы сравниваются с символами
INTR, QUIT, SUSP и DSUSP. Коды, используемые для этих символов,
определяются массивом c_cc[]. Если введенный символ совпадает с одним
из этих управляющих символов, исполняется функция, ассоциированная с
этим символом. Если ISIG не установлен, никакого сравнения не
делается, поэтому эти специальные функции доступны, только если ISIG
установлен.
Если установлен ICANON, включена каноническая обработка ввода. Это
разрешает исполнение функций забоя и стирания строки и сборку вводимых
символов в строки, разделенные символами NL, EOF, EOL и EOL2. Если
ICANON не установлен, запросы чтения удовлетворяются непосредственно
из "сырой" очереди. Запрос чтения не будет удовлетворен, пока не будет
прочитано MIN символов или между вводом отдельных символов не пройдет
TIME десятых долей секунды. Значения MIN и TIME хранятся в позициях
массива c_cc[], отведенных для символов EOF и EOL соответственно.
Если установлены XCASE и ICANON, то буквы верхнего регистра вводятся с
символом \ в качестве префикса, и выводятся так же. В этом режиме
генерируются при выводе и принимаются в качестве ввода следующие
специальные последовательности:
для: используйте:
` \'
| \!
~ \
{ \(
} \)
\ \\
Например, A вводится как \a, \n как \\n, и \N как \\\n.
Если установлен ECHO , на вводимые символы выдается эхо. Если
установлен NOFLSH, то сброс очередей ввода и вывода при получении
INTR, QUIT и SUSP не делается. Иначе эти символы сбрасывают содержимое
очередей ввода и вывода.
Если установлен TOSTOP, то процессу, который не является процессом
основной группы, но пытается писать на управляющий терминал,
посылается сигнал SIGTTOU. Этот сигнал обычно приостанавливает
процесс. Иначе вывод такого процесса выдается в текущий поток вывода.
Вывод разрешен процессам, которые заблокировали или игнорировали
сигнал SIGTTOU.
ЛОКАЛЬНЫЕ РЕЖИМЫ - c_lflag
БАЗОВАЯ ОБРАБОТКА СТРОК (0)
Флаг Значение
ISIG Разрешить посылку сигналов
ICANON Канонический ввод (обработка забоя и стирания строки)
XCASE Каноническое представление верхнего/нижнего регистров
ECHO Разрешить эхо
ECHOE Эхо на символ забоя - BS-SP-BS
ECHOK Выдавать NL после символа стирания строки
ECHONL Выдавать эхо на NL
NOFLSH Запретить сброс буферов после сигналов прерывания и
завершения
TOSTOP Посылать SIGTTOU фоновым процессам, которые пытаются
выводить на терминал
ECHOCTL Выдавать эхо на CTRL-символы как .r, ASCII DEL как
?
ECHOPRT Эхо на символ забоя как стертый символ
ECHOKE При стирании строки, очищать ранее введенную строку
символами BS-SP-BS
FLUSHO Сбрасывание буфера вывода (состояние)
PENDIN Повторять несчитанный ввод при следующем чтении или
введенном символе
IEXTEN Разрешить расширенные (определенные реализацией)
функции
Когда установлен ICANON, возможны следующие функции выдачи эхо:
1. Если ECHO и ECHOE установлены, а ECHOPRT нет, эхо на символы
ERASE и WERASE выдается как одна или несколько
последовательностей ASCII BS SP BS, что стирает последние символы
с экрана терминала.
2. Если ECHO и ECHOPRT установлены, эхо на первый ERASE или WERASE
из последовательности выдается как обратная косая черта (\), за
которым следует стертый символ. Эхо на последующие ERASE и WERASE
выдается в виде стираемых символов в обратном порядке. Перед тем,
как выдавать эхо на последующий вводимый символ, печатается косая
черта (/).
3. Если установлен ECHOKE, то символ стирания строки отображается
стиранием с экрана каждого символа строки (способом, который
определяется флагами ECHOE и ECHOPRT).
4. Если ECHOK установлен, а ECHOKE - нет, то после стирания строки
выводится символ NL, чтобы подчеркнуть, что строка была стерта.
Заметьте, что символ \ или LNEXT перед символами ERASE или KILL
лишает их специального значения.
5. Если установлен ECHONL, эхо на символ NL выдается, даже если ECHO
не установлен. Это полезно для терминалов с локальным эхо (так
называемых полудуплексных).
Если установлен ECHOCTL, то на все управляющие символы (символы с
восьмеричными кодами между 0 и 37), кроме ASCII TAB, ASCII NL,
СТАРТ- и СТОП-символа, эхо выдается в виде X, где X - это символ,
полученный путем добавления восьмеричного 100 к коду символа (т.е.
символ с кодом 1 выводится как а ASCII DEL с кодом восьмеричное
177 выводится как ?.
Если установлен FLUSHNO, записываемые данные не выводятся на терминал,
а игнорируются. Терминальный интерфейс переходит в это состояние при
вводе символа FLUSH. Программа может вывести терминал из этого
состояния, очистив флаг FLUSHO.
Если установлен PENDIN, любой непрочитанный к данному моменту ввод
повторяется при получении следующего символа.
Если установлен IEXTEN, разрешается исполнение следующих определенных
реализацией функций: специальные символы (WERASE, REPRINT, DISCARD и
LNEXT) и локальные флаги (TOSTOP, ECHOCTL, ECHOKE, ECHOPRT и PENDIN).
Начальные значения флагов: ISIG, ICANON, ECH и ECHOK.