[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Использование termios(2)

Существует более пятидесяти различных флагов, описывающих терминальный
интерфейс. Ниже приводятся некоторые из основных характеристик
терминала.
Скорость, размер символа и четность.
Используя флаг c_cflag, вы можете управлять скоростью передачи,
количеством бит в символе, количеством стоповых битов, обработкой бита
четности и т.д. Обычно, терминалы, подключенные к UNIX-системам,
используются в режиме 7-битного символа без четности.
Отображение символов.
Вы можете  управлять  обработкой  символов  возврата  каретки  (CR)  и
перевода строки (NL). Вы можете преобразовывать NL в CR (INLCR) и CR в
NL (ICRNL).  Вы  можете  также  игнорировать  поступающие  символы  CR
(IGNCR).   Это    полезно   для    терминалов,   которые    генерируют
последовательность символов  CR-NL при  нажатии клавиши  <RETURN>.  На
других терминалах,  которые  генерируют  одиночный  символ  CR,  лучше
принимать этот  символ и  преобразовывать его  в NL.  Флаги  для  этих
режимов помещаются в c_iflag. Соответственно, флаги ONLCR и OCRNL в c-
oflag используются  для  преобразования  NL  в  CR-NL  или  CR  в  NL,
соответственно, при выводе.
Для терминалов,  которые отображают  только буквы  верхнего  регистра,
могут быть  установлены флаги XCASE в c_iflag, IUCLC в c_iflag и OLCUC
в c_oflag.  Буквы верхнего  регистра отображаются в нижний регистр при
вводе и  наоборот -  при выводе.  Буквы верхнего регистра предваряются
символом обратной косой черты (backslash, \).
Большинство терминалов используют семибитный код ASCII для
представления символов. Однако может быть необходима работа с
восьмибитными данными. Например, это может потребоваться программам,
работающим с национальными алфавитами. Для того, чтобы выключить
срезание восьмого бита при вводе, вы должны очистить флаг ISTRIP в
c_iflag, установить флаг CS8 для передачи восьмибитных символов и
выключить контроль четности очисткой PARENB в c_cflag.
Задержки и табуляции.
Для механических терминалов можно установить различные флаги в
c_oflag, управляющие задержками при обработке перевода строки,
возврата каретки, горизонтальной табуляции, сдвига каретки назад
(backspace), вертикальной табуляции и перевода страницы.
Горизонтальная табуляция может преобразовываться в соответствующее
число пробелов установкой флага TAB3.
Управление потоком.
Вывод на  терминал может  быть приостановлен нажатием СТОП-символа, по
умолчанию CTRL-S,  и возобновлен  нажатием СТАРТ-символа, по умолчанию
CTRL-Q. Эта  возможность разрешается  установкой флага  IXON в c_flag.
Иначе, эти  символы не  имеют специального  смысла. Кроме  того,  если
установить флаг  IXANY, то  любой символ будет возобновлять вывод. Для
управления потоком вывода используется функция tcflow(2).
Кроме управления потоком вывода, установкой флага IXOFF в c_iflag
можно управлять потоком ввода. При этом, если входная очередь
приближается к заполнению, драйвер терминального устройства  пошлет
СТОП-символ для приостановки ввода, и СТАРТ-символ - для его
возобновления. Это может быть полезно, если прикладная программа
получает данные из удаленной системы.
(Продолжение на следующей странице)
                       ИСПОЛЬЗОВАНИЕ termios(2)
.    Скорость, размер символа и четность
.    Отображение символов
.    Задержки и табуляции
.    Управление потоком
.    Управляющие символы
.    Эхо
.    Немедленный ввод
.    "Сырой" терминальный ввод/вывод

Управляющие символы
При вводе некоторые символы имеют специальное значение. Например, #
является символом забоя, @ - символом стирания строки, CTRL-D - концом
ввода и т.д. Эти символы хранятся в массиве c_cc[] и могут быть
изменены. Например, при использовании дисплея, гораздо удобнее
использовать в качестве символа забоя BS (сдвиг каретки назад).
Эхо
Терминалы обычно работают с UNIX-системами в полнодуплексном режиме.
Это означает, что данные передаются в обоих направлениях одновременно
и что компьютер обеспечивает эхо (отображение на экране или на печати)
получаемых символов. Эхо выключается очисткой флага ECHO в c_lflag.
Кроме того, стертые нажатием клавиши забоя символы могут затираться
установкой флага ECHOE. Если установить флаг ECHOK, то стирание строки
символом KILL будет приводить к переводу строки на терминале.
Немедленный ввод
Обычно символы при вводе накапливаются, пока не соберется полная
строка, завершенная NL. Только после этого удовлетворяется запрос
read(2), даже если он требовал только один символ. Значение,
возвращаемое вызовом read(2), равно количеству прочитанных в
действительности символов. Во многих прикладных программах, таких как
редакторы форм или полноэкранные текстовые редакторы, строки ввода не
имеют смысла. В таких программах необходимо читать символы по мере их
ввода. При очистке флага ICANON в c_lflag вводимые символы не
группируются в строки, и read(2) читает их по мере поступления. Этот
режим известен также как режим неканонического ввода. Вместо этого
удовлетворение запроса read(2) определяется параметрами MIN
(минимальное количество нажатых клавиш) и TIME (промежуток времени
между введенными символами). Если ICANON установлен, то режим ввода
называется каноническим.
"Сырой" терминальный ввод/вывод
В прикладных программах передачи данных драйверы терминальных
устройств могут быть вынуждены передавать и принимать произвольные
восьмибитные данные. Это могут быть объектные модули или зашифрованные
данные. Для разрешения этого необходимо установить восьмибитные
данные, неканонический ввод, запретить все отображения символов и
управление потоком, устранить специальные значения всех управляющих
символов и выключить эхо. В конце раздела приводится пример
использования "сырого" терминального ввода/вывода.

.    Скорость, размер символа и четность
.    Отображение символов
.    Задержки и табуляции
.    Управление потоком
.    Управляющие символы
.    Эхо
.    Немедленный ввод
.    "Сырой" терминальный ввод/вывод