В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13 |
Общий терминальный интерфейс
Центральную роль в управлении терминалами играет структура termios, определенная во включаемом файле <termios.h>. Она должна содержать по крайней мере следующие поля.
tcflag_t c_iflag; /* Режимы ввода */ tcflag_t c_oflag; /* Режимы вывода */ tcflag_t c_cflag; /* Управляющие режимы */ tcflag_t c_lflag; /* Локальные режимы */ cc_t c_cc [NCCS]; /* Специальные управ- ляющие символы */
Типы tcflag_t, cc_t и фигурирующий далее speed_t должны определяться реализацией посредством typedef как беззнаковые целые.
Обращение к элементам массива c_cc, хранящего специальные управляющие символы, которые могут быть изменены, выполняется с помощью индексов с именами, полученными вставкой буквы V перед названием символа: VEOF, VEOL, VERASE, VINTR, VKILL, VQUIT, VSTART, VSTOP, VSUSP. Кроме того, еще два индекса, VMIN и VTIME, используются для работы со значениями MIN и TIME и могут совпадать с VEOF и VEOL, соответственно (поскольку символы EOF и EOL нужны только в каноническом режиме, а значения MIN и TIME - только в неканоническом).
Поле c_iflag структуры termios описывает основные параметры терминального ввода.
BRKINT
При разрыве соединения ( когда в течение времени, превышающего длительность передачи байта, поступают нулевые биты ) генерировать сигнал прерывания и сбрасывать очереди ввода / вывода.
ICRNL
Преобразовывать возврат каретки в перевод строки.
IGNBRK
Игнорировать разрыв соединения.
IGNCR
Игнорировать возврат каретки.
IGNPAR
Игнорировать символы с ошибками четности.
INLCR
Преобразовывать перевод строки в возврат каретки.
INPCK
Разрешить контроль четности.
ISTRIP
Отбрасывать старший бит, обрезая байты до семи бит.
IXOFF
Разрешить старт/стопное управление вводом.
IXON
Разрешить старт/стопное управление выводом.
PARMRK
Отмечать ошибки четности.
Поле c_oflag определяет системную обработку вывода. К числу обязательных для поддержки стандарт POSIX-2001 относит только один флаг - OPOST> (постпроцессировать вывод). В расширение XSI входят флаги, определяющие характер постпроцессирования: ONLCR (преобразовывать перевод строки в пару - перевод строки, возврат каретки ), OCRNL (преобразовывать возврат каретки в перевод строки ), NLDLY (выбрать задержку для перевода строки ) и т.п.
Поле управляющих режимов c_cflag описывает аппаратные характеристики линии и терминала: размер символа в битах ( CSIZE: от CS5 - 5 бит до CS8 - 8 бит), число стоп-бит ( CSTOPB: два стоп-бита), освобождение линии при закрытии последнего файлового дескриптора, ассоциированного с терминалом ( HUPCL ), контроль четности ( PARENB: контроль включен; PARODD: проверка на нечетность) и т.п.
Стандарт осторожен в части представления скорости передачи. Оговаривается только, что скорость хранится в структуре termios как значение типа speed_t, но не утверждается, что она представлена как часть поля c_cflag (хотя в исторически сложившихся реализациях это так). Допустимые значения скорости задаются именованными константами: от B0 - нулевой, означающей разрыв соединения, до B38400 - 38400 бит/сек.
Поле локальных режимов c_lflag структуры termios используется для управления различными характеристиками терминала. В их число входят:
ECHO
Включить эхоотображение.
ECHOE
Отображать символ забоя как тройку (возврат на шаг, пробел, возврат на шаг).
ECHOK
Отображать символ уничтожения строки (по крайней мере путем выдачи перевода строки ).
ECHONL
Включить эхоотображение перевода строки.
ICANON
Канонический режим ввода.
ISIG
Разрешить сигналы. Если установлен флаг ISIG, то каждый вводимый символ сравнивается со специальными управляющими символами INTR, QUIT и SUSP. В случае совпадения выполняется ассоциированная функция.