PTY(7) | Руководство программиста Linux | PTY(7) |
ИМЯ¶
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/ptyXY (основной) и /dev/ttyXY (подчинённый), где X это буква из 16-символьного набора [p-za-e], а Y это буква из 16-символьного набора [0-9a-f] (точный диапазон символов этих наборов отличается в разных реализациях UNIX). Например, /dev/ptyp1 и /dev/ttyp1 составляют псевдо-терминальную пару BSD. Процесс находит неиспользуемую псевдо-терминальную пару пробуя вызывать open(2) с каждым основным псевдо-терминалом, пока вызов не выполнится успешно. Затем может быть открыт соответствующий подчинённый псевдо-терминал (подставив «tty» вместо «pty» имени основного конца).
ФАЙЛЫ¶
- /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)
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 4.16. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Alexey, Azamat Hackimov <azamat.hackimov@gmail.com>, kogamatranslator49 <r.podarov@yandex.ru>, Kogan, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
15 сентября 2017 г. | Linux |