Этот раздел обсуждает основы интерфейса для управления асинхронными коммуникационными портами (терминальными портами). Функции, перечисленные на странице руководства TERMIOS(2) используются для доступа и конфигурации аппаратного интерфейса с терминалом. Эти функции и их аргументы будут обсуждаться в этом разделе. Первая секция этого раздела предоставляет информацию, необходимую для понимания характеристик терминала и принципов работы аппаратного и программного терминального интерфейса. Затем будут обсуждаться некоторые аспекты программного интерфейса с терминалом. Приводятся примеры использования функций termios(2) для изменения этих установок.
Приблизительно до конца 80х-начала 90х, терминалы были основным средством организации взаимодействия человека с компьютером. Терминал (дословно — оконечное устройство) представляет собой электронную пишущую машинку (телетайп) или устройство, состоящее из клавиатуры и дисплея (видеотерминал). Оба типа терминалов соединены с компьютером последовательным портом (обычно, RS232 или токовая петля); при этом символы, вводимые с клавиатуры, передаются компьютеру, а данные, передаваемые компьютером, показываются на дисплее (в случае видеотерминала) или печатаются на бумаге (в случае телетайпа). Как телетайпы, так и видеотерминалы предназначены для ввода и отображения текстовой информации. С точки зрения компьютера, терминальный порт представляет собой двунаправленный (полнодуплексный) последовательный порт, по которому производится обмен символами кодировки ASCII или национальной кодировки, такой, как КОИ8.
Кроме ASCII, большинство видеотерминалов могут передавать и принимать коды расширения (escape sequence). Обычно это многобайтовые коды, начинающиеся с символа '\0x1B' (ASCII ESC), обозначающие нажатия клавиш, для которых нет соответствующих кодов в ASCII (стрелки, «функциональные» клавиши и т. д.), а также команды терминалу: передвижение курсора, изменения цвета текста и т.д.. Так, на многих видеотерминалах, последовательность символов "\0x1B[A" обозначает нажатие клавиши «стрелка вверх» на клавиатуре, а также команду на перемещение курсора на одну строку вверх.
Поскольку терминалы были основным средством взаимодействия человека с компьютером, в системах семейства Unix в драйвер терминала был встроен ряд функций, не сводящихся к простой передаче данных через порт. Для управления всеми этими функциями, терминальные устройства поддерживали набор специальных команд ioctl(2). Среди этих функций следует упомянуть:
Редактирование ввода: стирание последнего введенного символа, последнего слова и всей строки.
Преобразование ввода: преобразование символов конца строки, замена табуляций на пробелы, и др.
Генерация сигналов: при вводе определенных символов, ядро посылает группе процессов первого плана сигналы.
Поддержка терминальных сессий и управления заданиями.
Было разработано множество программ, рассчитанных на работу с терминалами: экранные текстовые редакторы, интегрированные среды разработки, почтовые клиенты, клиенты gopher, веб-браузеры (lynx и links), файловые менеджеры, игры и др. Командные процессоры с управлением заданиями (ksh(1), jsh(1), bash(1)) использовали поддержку со стороны терминала (фоновые группы и группы первого плана, а также сигналы управления заданиями). Кроме того, многие программы, такие как su, sudo, login, использовали некоторые простые терминальные функции, такие, как включение и выключение «эхо» (отображения вводимых пользователем символов). Действительно, при наборе команд, пользователю необходимо видеть на экране набираемые им символы, а при вводе пароля это может быть нежелательно. Поэтому утилиты, требующие ввода пароля, выключают отображение ввода, а потом включают его обратно.