Вопрос:
Если у меня есть пара главный/подчиненный pty или tty, что я не могу с ней сделать, если у меня есть только файловый дескриптор подчиненного узла? Или, другими словами: что я могу сделать только, если у меня есть файловый дескриптор главного узла?
Мое текущее понимание:
Я вижу типичные отношения терминала/консоли/SSH, имеющие главный конец для взаимодействия с человеком, и одна или несколько программ (например, оболочка и ее дочерние процессы), находящиеся на ведомом конце. И я (в общих чертах) рассматриваю более необычные (/архаичные?) варианты использования, такие как использование TTY для других типов каналов передачи данных, таких как PPP. Этот вопрос не относится к категории «Я не понимаю этот деловой вопрос по телетайпу». Я спрашиваю о (низкоуровневом?) материале API: например. Существуют ли какие-либо манипуляции с termios/ioctl или другие программные изменения в паре TTY, которые невозможно выполнить, если у вас нет доступа к главному FD?
Я думаю, очевидные из них:
- Я могу только читать/писать с главного конца, если у меня есть FD главного конца.
- Grantpt/unlockpt/ptsname может использоваться только на FD главной стороны.
Что-нибудь еще?
Я периодически читал справочные страницы и экспериментировал на своих машинах с Linux: основные вещи, которые хотелось бы делать с pty (например, stty columns 78
и т. д.), похоже, работают на обоих концах. Но я подозреваю, что есть вещи, которые может делать только процесс, содержащий файловый дескриптор главного конца (особенно потому, что дихотомия имени ведущий-ведомый предполагает некоторый односторонний контроль/владычество). И, конечно же, поскольку я тестирую только Linux, возможны различия в поведении между различными версиями/конфигурациями Linux и Unix, поэтому я не хочу предполагать, что то, что я вижу, является переносимым.
Мотивация
(На случай, если кто-то захочет знать, почему я хочу знать)
- Общие знания/любопытство.
- Мне не нравится текущий выбор инструментов командной строки для работы с ptys. Не вдаваясь в подробности, я просмотрел
reptyr
,ptyget
,expect
/empty
,screen
/tmux
(/neercs
? тот, что сreptyr
-подобной функцией),dtach
/abduco
, и ни один из них не достиг моей наилучшей минималистской универсальности. Я пытаюсь стать более информированным, чтобы я мог лучше оценить существующие решения и/или лучше разработать свой собственный инструмент (ы), чтобы избавиться от моего особого зуда.