[<<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.