PTY/TTY - 只有从属 FD 不能做什么

PTY/TTY - What Can't You Do With Only Slave FD

问题:

如果我有一个 pty 或 tty master/slave 对,如果我只有从属节点的文件描述符,我不能用它做什么?或者,换句话说:如果我有主节点的文件描述符,我只能做什么?

我目前的理解:

我理解了 terminal/console/SSH 的“典型”关系,它具有用于与人交互的主端,并且一个或多个程序(例如 shell 及其子进程)在奴隶端。我(松散地)理解了更不寻常的(/古老的?)用例,例如将 TTY 用于其他类型的数据链接,例如 PPP。这个问题不是“我不懂这个 TTY 业务”的问题。我问的是(“低级”?)“API”的东西:例如如果您无权访问主 FD,是否有任何 termios/ioctl 操作或对 TTY 对的其他编程更改无法完成?

我想最明显的是:

还有什么吗?

我已经 on/off 阅读了一些手册页并在我的 Linux 机器上进行了试验:人们想用 pty 做的基本事情(例如 stty columns 78 等)似乎在“两端”工作。但我怀疑只有持有主端文件描述符的进程才能做的事情(特别是因为主从名称二分法暗示了一些单方面的control/dominion)。当然,因为我只在 Linux 上进行测试,Linux 的各种 versions/configurations 和 Unix 之间可能存在行为差异,所以我不想假设我所做的'眼见为实。

动机

(万一有人想知道我为什么想知道)

  1. 一般knowledge/curiosity.
  2. 我不喜欢当前选择的用于处理 ptys 的命令行工具。在不深入细节的情况下,我查看了 reptyrptygetexpect/emptyscreen/tmux(/neercs? 具有 reptyr 特征的那个),dtach/abduco,其中 none 击中了我极简主义多功能性的最佳点。我正在努力变得更加知情,以便更好地评估现有解决方案 and/or 更好地设计我自己的工具来解决我的特殊问题。

多亏了 Whosebug 的 related-questions 建议和其他在线搜索,我找到了(部分?)答案:

  • 在 Linux 中的 PTY 上启用或禁用数据包模式只能在您拥有主 FD 的情况下完成 [See TIOCPKT at this manpage]
  • 获取与 Linux 中的 TTY 关联的会话 ID 只能在您拥有主 FD 的情况下完成(不清楚这是否是 expected/intended 行为)[See TIOCGSID at this manpage]
  • Re-sizing TTY 实际上只能从主 FD 移植(终端仿真器可能会在调整 TTY 大小时调整它的大小,但是只有从 FD 的应用程序并不能真正确定主大小调整大小因此,或者终端驱动程序甚至会接受来自从端的调整大小)。 [Source]
  • 有一个技巧可以判断一个TTY的slave端是否打开,如果你没有master FD是做不到的。 [Source]

随着我了解更多,我会尽量回来编辑它。