[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Глава 28. Подсистема tty

AIX - это многопользовательская операционная система, причем с ней могут работать пользователи как локальных, так и удаленных компьютеров. На уровне соединений эта возможность обеспечивается подсистемой tty.

Взаимодействие между терминалами и программами происходит через интерфейс tty. Примеры устройств tty приведены ниже:

В этом разделе рассматриваются следующие вопросы:


Задачи подсистемы TTY

Подсистема tty отвечает за:

Управляющий терминал обслуживает операции ввода-вывода группы процессов. Особый файл tty обеспечивает интерфейс для управляющего терминала. В реальной работе пользовательские программы редко явно открывают файлы терминалов, такие как dev/tty5. Эти файлы открываются командой getty или rlogind. После этого они применяются в качестве устройств стандартного ввода и вывода.

Модули подсистемы tty

Для выполнения поставленных задач подсистема tty разбита на модули. Модуль отвечает за один из уровней передачи данных между компьютером и асинхронным устройством. Модули tty могут добавляться и удаляться динамически.

Подсистема tty поддерживает три основных типа модулей:

Драйверы tty

Драйверы tty, или аппаратные дисциплины, напрямую управляют аппаратным (для устройств tty) или псевдоаппаратным (для устройств pty) обеспечением. Драйверы занимаются обменом данными с адаптером, обеспечивая для вышестоящих модулей управление потоком и специальную семантику открытия порта.

Существуют следующие драйверы tty:

cxma Высокоуровневый терминал, подключенный к 128-портовому асинхронному контроллеру. Имя этого терминала - /dev/hft/Y, где Y > = 0.
lft Низкоуровневый терминал. Имя этого терминала - /dev/lftY, где Y >= 0.
lion 64-портовый асинхронный контроллер.
rs Встроенный 8- или 16-портовый асинхронный контроллер.

Дополнительная информация по этому вопросу приведена в разделе Драйверы tty.

Дисциплины линии

Дисциплины линии предназначены для управления заданиями и интерпретации специальных символов. Они выполняют все необходимые преобразования входящих и исходящих потоков данных. Кроме того, дисциплины линии обрабатывают ошибки и отслеживают состояние драйвера tty.

Предусмотрены следующие дисциплины линии:

ldterm Устройства терминалов (см. Модуль дисциплины линии (ldterm))
sptr Принтер (команда splp)
slip Линия связи SLIP (команда slattach)

Модули преобразования

Модули, или дисциплины, преобразования предназначены для обработки символов ввода и вывода.

Предусмотрены следующие модули преобразования:

nls Поддержка национальных языков; этот модуль преобразует символы входящих и исходящих потоков в соответствии с таблицами, определенными для порта (см. описание команды setmaps)
lc_sjis и uc_sjis Первичные и вторичные модули преобразования многобайтовых символов из SJIS (Shifted Japanese Industrial Standard) в AJEC (Advanced Japanese EUC Code) для дисциплины линии ldterm.

Дополнительная информация по этому вопросу приведена в разделе Модули преобразования.

Структура подсистемы tty

Подсистема tty основана на потоках. Это позволяет создать гибкую структуру, разбитую на модули, которая обладает следующими свойствами:

Поток tty состоит из следующих модулей:

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

Для принтера модули поддержки национальных языков обычно отсутствуют, что существенно упрощает структуру потока.

Стандартные функции

Интерфейсы стандартных функций подсистемы tty описаны в файлах /usr/include/sys/ioctl.h и /usr/include/termios.h. Файл ioctl.h, применяемый всеми модулями, содержит структуру winsize и несколько команд ioctl. Файл termios.h содержит типы данных и функции, определенные в стандарте POSIX.

Эти функции объединены в группы по своему назначению и описаны ниже.

Функции управления аппаратным обеспечением

Для управления аппаратным обеспечением предназначены следующие функции:

cfgetispeed Возвращает скорость получения данных в бодах
cfgetospeed Возвращает скорость передачи данных в бодах
cfsetispeed Задает скорость получения данных в бодах
cfsetospeed Задает скорость передачи данных в бодах
tcsendbreak Передает сигнал прерывания по асинхронной последовательной линии

Функции управления потоком

Для управления потоком предназначены следующие функции:

tcdrain Ожидает завершения вывода
tcflow Выполняет функции управления потоком
tcflush Очищает указанную очередь

Функции для работы с терминалом

Для получения информации и управления терминалом предназначены следующие функции:

isatty Определяет, является ли устройство терминалом
setcsmap Считывает файл преобразования кодовых наборов и связывает его с устройством стандартного ввода
tcgetattr Возвращает состояние терминала
tcsetattr Задает состояние терминала
ttylock, ttywait, ttyunlock или ttylocked Управляют функциями блокировки терминала
ttyname Возвращает имя терминала

Функции изменения размера окна и терминала

Ядро сохраняет структуру winsize с информацией о размере текущего терминала или окна. Структура winsize содержит следующие поля:

ws_row Число строк (символов) окна или терминала
ws_col Число столбцов (символов) окна или терминала
ws_xpixel Горизонтальный размер окна или терминала в пикселах
ws_ypixel Вертикальный размер окна или терминала в пикселах

По принятому соглашению, значение 0 во всех полях структуры winsize означает, что она еще не была заполнена.

termdef Запрашивает характеристики терминала.
TIOCGWINSZ Возвращает размер окна. В качестве аргумента этой операции передается указатель на структуру winsize, в которую помещаются параметры текущего окна или терминала.
TIOCSWINSZ Задает размер окна. В качестве аргумента этой операции передается указатель на структуру winsize, в которую помещаются новые параметры окна или терминала. Если переданная информация отличается от текущей, группе процессов терминала отправляется сигнал SIGWINCH.

Функции управления группами процессов

Для управления группой процессов предназначены следующие функции:

tcgetpgrp Возвращает идентификатор интерактивной группы процессов
tcsetpgrp Задает идентификатор интерактивной группы процессов

Операции изменения размера буфера

Следующие операции ioctl задают размер буферов ввода и вывода на терминал. В качестве аргумента этим операциям передается указатель на размер буфера.

TXSETIHOG Задает максимальное число символов, которые могут быть получены и сохранены во внутренних буферах подсистемы tty до получения процессом. Значение по умолчанию равно 512. При чтении символа с номером, на единицу превышающим заданное значение, в протокол заносится сообщение об ошибке, а буфер очищается. Размер буфера не должен быть слишком большим, поскольку буфер расположен в закрепленной памяти системы.
TXSETOHOG Задает максимальное число символов, которые могут быть помещены в буфер для вывода. Значение по умолчанию равно 512. После заполнения буфера символы перестают выводиться. Размер буфера не должен быть слишком большим, поскольку буфер расположен в закрепленной памяти системы.

Синхронизация

Синхронизация подсистемы tty обеспечивается модулем STREAMS. Модули потоков tty поддерживают синхронизацию на уровне пар очередей. Такая синхронизация позволяет разделить обработку на два параллельных потока.

Связанная информация

Обзор потоков.

Глава 7, Управление вводом и выводом

Глава 16, Поддержка национальных языков

Модуль дисциплины линии (ldterm)

Модули преобразования

Драйверы tty

Особый файл lft описывает драйвер консоли.

Файл termios.h содержит структуры данных, применяемые с дисциплинами линий POSIX.

Файл termiox.h содержит интерфейс управления аппаратным потоком данных для асинхронных линий.

Особый файл tty - это синоним для управляющего терминала.

Особый файл pty описывает драйвер устройства псевдотерминала.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]