To facilitate moving the terminal emulation into userland, while still keeping the TTY subsystem (session management and line discipline) intact, the pseudo terminal or pty was invented.
У парня по имени Линус Акессон есть демистифицированная TTY-страница со всей картинкой. (Я нашел это через Arch Linux wiki ДОБАВЛЕНО :mosvy, кажется, ненавидит это... ).
Несколько дней спустя мне все еще нравится тот ответ, который я привел выше. Даже в википедии есть ссылка. После некоторых обсуждений (см. комментарии, увы )я свободно отредактировал нижеследующее. Различия можно увидеть в кнопке "отредактировано..."..."PTMX" и "TTY Subsystem" являются новыми словами. Хороший чиновник (? )источник:
drivers/tty/Kconfig
И «эмуляция терминала в пользовательской области » — это то, что делают xterm (и т. д. ). XTerm, вместе с X и оконным менеджером, должен сделать так, чтобы «bash» работал на Linux VT.
Прямым следствием того, что X заботится обо всем, что находится в пользовательской среде, является :после запуска многих xterm/bash, каждый xterm подключается к pts/0, а каждый bash к pts/1, pts/2,.. Я также могу запустить дочерние xterms/bash изнутри одного с помощью
xterm &
. Или запустите новый слой оболочки в xterm с помощьюbash
. В любом случае пользователь вскоре теряет связь с зависимостями ---, поэтому легко с помощью PTY создавать окна с оболочками.VT (= VC )из "подсистемы TTY" используются более статические , с 64 в качестве (в первую очередь? ), и только 6 настроены после загрузки. С точки зрения
getty/agetty
("открывает tty-порт,..." )это может выглядеть иначе.Вот мои специальные файлы с мажором 5 в
/dev
:crw-rw-rw- 1 root tty 5, 0 tty crw------- 1 root root 5, 1 console crw-rw-rw- 1 root tty 5, 2 ptmx
Пары? Этот термин, по-видимому, происходит от BSD-стиля PTY, когда каждый новый pty помещался в файл "p" и "s". В UNIX98 _PTY это:
/dev/ptmx :MX как MULTIPLEX(не MASTER X )для концептуальной главной стороны. И для клиентской стороны
/dev/pts/1-n
. Про /dev/pts/0 сейчас ничего не скажу. Один занятый ГЛАВНЫЙ и много занятых ПОДЧИНЕННЫХ.Это скорее отношение 1 -к -n, чем пара.Эти три специальных файла символьных устройств с major=5 на самом деле являются специальными специальными файлами . Как файлы они мало что делают. Но за каждым файлом устройства стоит какой-то код, и вот он
drivers/tty/*.c
. Обработка клавиатуры не имеет большого значения. Это и коммутация ТН, и линейная дисциплина, а может и то и другое одновременно.Существует каталог
/dev/pts/
с другим файлом ptmx и всеми основными файлами = 136 подчиненных устройств. Нормальный/dev/ttyN
имеет мажор=4.спин-офф из (удален? )комментарии :Это один из
ioctl_console
запросов, которые обсуждал другой Q. «tty не является виртуальным терминалом» , говорит С.К. в ioctl VT _GETSTATE...tty не является vt(в последнем комментарии здесь, извините)VT_GETSTATE Get global vt state info. argp points to a struct vt_stat { unsigned short v_active; /* active vt */ unsigned short v_signal; /* signal to send */ unsigned short v_state; /* vt bit mask */ }; For each vt in use, the corresponding bit in the v_state mem‐ ber is set. (Kernels 1.0 through 1.1.92.)
Из
config UNIX98_PTY
(Kconfig в драйверах/tty)Typical programs for the master side are telnet servers and xterms.
Это процессы bash получают /dev/pts/1 -255, а не xterm. xterm и wm являются посредниками между x и bash. Это совместная работа с самого начала
xinit wm x
илиxinit client -- server display
.
Вы выбрали разумный формат даты и времени, который лексически и хронологически сортируется так же.
В Tcl вы бы сделали
cd Parent
set subdirs [glob -type d *]
set last [lindex [lsort $subdirs] end]
Если у вас есть другие подкаталоги, которые мешают сортировке, и вы хотите отфильтровать их, вы можете:
set subdirs [lmap dir [glob -type d *] {
if {![regexp {^\d{4}-\d{2}-\d{2}_\d{2}.\d{2}.\d{2}$} $dir]} then continue
set dir
}]