ИМЯ pty - интерфейсы псевдо-терминалов
ОПИСАНИЕ Псевдо-терминал (иногда применяют сокращение «pty») — это пара виртуальных символьных устройств, которые предоставляют двунаправленный канал обмена. Один конец канала называется основным (master); другой конец канала называется подчинённым (slave). Подчинённый конец псевдо-терминала предоставляет интерфейс, который работает также как обычный классический терминал. Процесс, который управляется через терминал, может открыть подчинённый конец псевдо-терминала и затем управляться программой, которая открыла основной конец. Всё что пишется в основной конец поступает процессу на подчинённом конце так, как-будто данные вводились с терминала. Например, запись символа прерывания (обычно control-C) в основной конец приводит к генерации сигнала прерывания (SIGINT) для группы активных процессов, которая подключена к подчинённому концу. И наоборот, всё что записывается в в подчинённый конец псевдо-терминала, может быть прочитано процессом, который подключён к основному концу. Псевдо-терминалы используются такими приложениями как службы сетевого входа (ssh(1), rlogin(1), telnet(1)), эмуляторами терминалов xterm(1), script(1), screen(1), tmux(1), unbuffer(1) и expect(1).
Поток данных между основным и подчинённым концом обрабатывается асинхронно, почти как поток с физического терминала. Данные, записываемые в подчинённый конец, будут доступны без промедления, но могут быть недоступны немедленно. Схожим образом, есть маленькая задержка обработки между записью в основной конец и когда эти данные станут видимы на подчинённом конце.
Исторически существует два программных интерфейса для взаимодействия с псевдо-терминалами: BSD и System V. В SUSv1 стандартизирован программный интерфейс, основанный на программном интерфейсе System V, который должен применяться во всех новых программах, использующих псевдо-терминалы.
В Linux есть оба типа псевдо-терминалов — BSD и (стандартизированный) System V. В системах Linux терминалы System V часто называют псевдо-терминалами UNIX 98. Начиная с ядра версии 2.6.4 псевдо-терминалы BSD признаны устаревшими (их можно отключить во время настройки ядра). В новых программах следует использовать псевдо-терминалы UNIX 98.
Псевдо-терминалы UNIX 98 Незадействованный основной псевдо-терминал UNIX 98 открывается вызовом posix_openpt(3) (эта функция открывает основное клонирующее устройство, /dev/ptmx; смотрите pts(4)). После выполнения специальной программной инициализации (с помощью grantpt(3) изменяется владелец и права на подчинённое устройство и с помощью unlockpt(3) разблокируется подчинённое устройство), соответствующее подчинённое устройство можно открыть, передав имя, полученное от ptsname(3), в вызов open(2).
Ядро Linux задаёт ограничение на количество доступных псевдо-терминалов UNIX 98. В ядрах до версии 2.6.3 включительно, это ограничение настраивалось при компиляции ядра (CONFIG_UNIX98_PTYS), и разрешалось 2048 псевдо-терминалов (по умолчанию 256). Начиная с версии 2.6.4, ограничение динамически настраивается через /proc/sys/kernel/pty/max, а в файле /proc/sys/kernel/pty/nr хранится количество уже используемых псевдо-терминалов. Подробности об этих двух файлах смотрите в proc(5).
Псевдо-терминалы BSD Псевдо-терминалы в стиле BSD предоставляются в виде заранее созданных пар, с
ФАЙЛЫ /dev/ptmx (основное клонирующее устройство UNIX 98) /dev/pts/* (подчинённые устройства UNIX 98) /dev/pty[p-za-e][0-9a-f] (основные устройства BSD) /dev/tty[p-za-e][0-9a-f] (подчинённые устройства BSD)
ЗАМЕЧАНИЯ Описание запроса TIOCPKT ioctl(2), который управляет пакетным режимом, можно найти в ioctl_tty(2).
Вызовы ioctl(2) для BSD TIOCSTOP, TIOCSTART, TIOCUCNTL и TIOCREMOTE не реализованы в Linux.
СМОТРИТЕ ТАКЖЕ ioctl_tty(2), select(2), setsid(2), forkpty(3), openpty(3), termios(3), pts(4), tty(4)
|