Программирование в стандарте POSIX

Общий терминальный интерфейс


В стандарте POSIX-2001 терминал или терминальное устройство определяется как символьный специальный файл , удовлетворяющий спецификациям общего терминального интерфейса.

С каждым терминальным устройством ассоциированы очереди ввода и вывода.

Ввод может происходить в каноническом и неканоническом режимах. Канонический режим означает построчную буферизацию ввода системой, а также естественную обработку символов забоя и уничтожения строки.

В неканоническом режиме входные данные не подвергаются препроцессированию системой, а обработка запроса на чтение зависит от двух параметров - min и time.

Некоторые символы играют специальную роль при вводе и/или выводе. Например, символ intr генерирует сигнал прерывания (sigint), посылаемый всем процессам, для которых данный терминал является управляющим.

Служебная программа tty выдает на стандартный вывод имя терминала, открытого в качестве стандартного ввода.

Узнать, ассоциирован ли открытый файловый дескриптор с терминальным устройством, а также получить имя этого устройства можно с помощью функций isatty() и ttyname().

Каждый терминал обладает рядом характеристик, которые можно опросить и/или изменить, используя утилиту stty.

Некоторые, хотя и весьма ограниченные, возможности управления терминалами предоставляет служебная программа tput.

На уровне функций опрос и изменение характеристик терминала разбиты на два семейства: tc*() и cf*(). В первое входят функции tcgetattr() - опрос, tcsetattr() - изменение, tcflow() - приостановка или возобновление терминального ввода/вывода, tcflush() - сброс очереди ввода, tcdrain() - ожидание физического окончания вывода, tcsendbreak() - разрыв соединения, tcgetpgrp() - получение идентификатора ассоциированной с терминалом группы процессов переднего плана, tcsetpgrp() - установка идентификатора группы, tcgetsid() - опрос идентификатора группы процессов лидера сеанса, для которого терминал является управляющим.

Функции семейства cf*() - cfgetispeed(), cfgetospeed(), cfsetispeed(), cfsetospeed() - служат для выборки/изменения данных о скорости терминального ввода/вывода.

Для получения маршрутного имени управляющего терминала служит функция ctermid().



Содержание раздела