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

script
Команда unix, записывающая ввод пользователя для последующего воспроизведения. В некоторых операционных системах , включая Unix-подобные системы, псевдотерминал , псевдотерминал или PTY — это пара конечных точек (файлов) псевдоустройств , которые устанавливают асинхронный двунаправленный канал связи ( IPC ) (с двумя портами) между двумя или более процессами. [1] [2] [3]
Одно псевдоустройство в паре, главное , предоставляет средства, с помощью которых эмулятор терминала или сервер удаленного входа в систему (например, сервер Telnet , rlogin или Secure Shell ) [3] Процесс управляет подчиненным. Другое псевдоустройство, ведомое , эмулирует аппаратное устройство последовательного порта . [1] и используется программами, ориентированными на терминал, такими как оболочки (например, bash ), как процессы для чтения/записи данных обратно из/в главную конечную точку. [1] PTY аналогичны двунаправленным трубам. [3] : 1388
Devpts — это виртуальная файловая система ядра Linux, содержащая псевдотерминальные устройства.
Реализация Linux основана на терминалах в стиле System V (обычно называемых псевдотерминалами UNIX 98). [4] и предоставляет POSIX и API единой спецификации Unix в форме posix_openpt() с 1998 года. [5]
История
[ редактировать ]Псевдотерминалы присутствовали в мониторе разделения времени DEC PDP-6 по крайней мере еще в 1967 году и использовались для реализации пакетной обработки. Они описаны в документации последующего TOPS-10 на PDP-10 . [6] Другие операционные системы DEC также имели PTY, включая RSTS/E для PDP-11 , как и сторонняя операционная система TENEX для PDP-10.
Реализации псевдотерминалов Unix восходят к модификациям, которые RAND и BBN внесли в 6-е издание в конце 1970-х годов для поддержки удаленного доступа по сети. [7] Современные псевдотерминалы Unix возникли в 1983 году во время разработки Eighth Edition Unix и были основаны на аналогичной функции TENEX. [8] Они были частью версии BSD 4.2 , с довольно громоздкой openpty()
интерфейс, определенный для использования. [9]
от AT&T System V включила поддержку псевдотерминалов в качестве драйвера в свою модель устройства STREAMS , а также псевдотерминальный мультиплексор ( /dev/ptmx ). Позже это превратилось в стиль PTY Unix98.
Книги
[ редактировать ]Программный интерфейс Linux 2010 года содержит целую главу (глава 64 «Псевдотерминалы», стр. 1375–1399), объясняющую псевдотерминалы. Затем есть еще одна, глава 62 «Терминалы», посвященная терминалам.
В 2018 году консоль Windows была расширена за счет интерфейса PTY под названием ConPTY. [10]
Приложения
[ редактировать ]Роль процесса эмулятора терминала заключается в следующем:
- для взаимодействия с пользователем,
- для подачи текстового ввода на главное псевдоустройство для использования оболочкой (например, bash), которая подключена к подчиненному псевдоустройству,
- для чтения текстового вывода с главного псевдоустройства и показа его пользователю.
Процесс эмулятора терминала также должен обрабатывать команды управления терминалом, например, для изменения размера экрана. Широко используемые программы-эмуляторы терминала включают в себя xterm , терминал GNOME , консоль и терминал .
Серверы удаленного входа, такие как серверы Secure Shell и Telnet, играют ту же роль, но взаимодействуют с удаленным пользователем, а не с локальным.
Screen и Tmux используются для добавления контекста сеанса к псевдотерминалу, что делает решение гораздо более надежным и универсальным. Например, каждый из них обеспечивает постоянство терминала, позволяя пользователю отключиться от одного компьютера, а затем подключиться позже к другому компьютеру.
Варианты
[ редактировать ]В системе BSD PTY — файл подчиненного устройства, который обычно имеет имя вида /dev/tty[p-za-e][0-9a-f]
, поддерживает все системные вызовы, применимые к устройствам текстовых терминалов. Таким образом, он поддерживает сеансы входа в систему . Главный файл устройства, который обычно имеет имя вида /dev/pty[p-za-e][0-9a-f]
, является конечной точкой для связи с эмулятором терминала. С этим [p-za-e]
схеме именования может быть не более 256 пар tty. Кроме того, поиск первого свободного мастера pty может оказаться затруднительным, если не будет принята схема блокировки. По этой причине последние операционные системы BSD, такие как FreeBSD , реализуют PTY Unix98. [11]
BSD PTY устарели благодаря Unix98 ptys, чья система именования не ограничивает количество псевдотерминалов и доступ к которым происходит без опасности возникновения условий гонки. /dev/ptmx
это «главный мультиплексор псевдотерминала». Его открытие возвращает файловый дескриптор главного узла и вызывает связанный с ним подчиненный узел. /dev/pts/N
быть созданным. [12]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б с «Псевдотерминальные файлы» . www.ibm.com . 12 февраля 2016 г. Проверено 30 сентября 2021 г.
- ^ «Глава 64: Псевдотерминалы — Интерфейс программирования Linux [Книга]» . www.oreilly.com . Проверено 30 сентября 2021 г.
- ^ Jump up to: а б с Керриск, Майкл (2010). Интерфейс программирования Linux: руководство по системному программированию Linux и UNIX . Сан-Франциско: Пресса без крахмала. ISBN 978-1-59327-291-3 . OCLC 728672600 .
- ^ «pty(7) — страница руководства Linux» . man7.org . Проверено 30 сентября 2021 г.
- ^ Единая спецификация UNIX , версия 4 от Открытой группы. – Справочник по системным интерфейсам,
- ^ Справочное руководство программиста мониторов с разделением времени PDP-10, раздел 5.10
- ^ `` Драйвер PTY для строк SRI-NOSC Net UNIX 15-31
- ^ Ричи, Д.М. « Потоковая система ввода-вывода ». Технический журнал AT&T Bell Laboratories . 63 (8): 1897–1910. CiteSeerX 10.1.1.48.3730 . дои : 10.1002/j.1538-7305.1984.tb00071.x . S2CID 33497669 .
- ^ FreeBSD функциям библиотеки Руководство по –
- ^ «Представляем псевдоконсоль Windows (ConPTY)» . Командная строка Windows DevBolgs . 3 августа 2018 г.
- ^ FreeBSD по интерфейсам ядра Руководство –
- ^ Linux программиста Руководство – Специальные файлы –
Внешние ссылки
[ редактировать ]- Контейнеры, псевдо-TTY и обратная совместимость , LWN.net , 1 июня 2016 г., Нил Браун