PTY/TTY - 只有Slave FD你不能做什么

mtr*_*eur 9 unix linux tty pty termios

题:

如果我有一个pty或tty主/从对,如果我只有从节点的文件描述符,我怎么办?或者,换一种说法:我能如果我有主节点的文件描述符呢?

我目前的理解:

[编辑]

我理解终端/控制台/ SSH的"典型"关系,其具有用于与人交互的主端,以及在从端上的一个或多个程序(例如,shell及其子进程).我(松散地)找到更不寻常的(/过时的)用例,例如将TTY用于其他类型的数据链接,如PPP.这个问题不是 "我没有得到这个TTY业务"的问题.我问的是("低级"?)"API"的东西:例如,如果你没有访问主FD的话,是否有任何termios/ioctl操作或对tty对的其他编程修改无法实现?

[/编辑]

我想明显的是:

  • 如果我有主端FD,我只能从主端读/写.
  • grantpt/unlockpt/ptsname只能在主端FD上使用.

还要别的吗?

我一直在阅读一些手册页并在我的Linux机器上进行试验:人们想要用pty做的基本内容(例如stty columns 78,等等)似乎在"两端"上工作.但我怀疑只有一个进程持有主端的文件描述符才能做到(特别是因为主从名称二分法暗示了一些单边控制/统治).当然,由于我只是在Linux上进行测试,因此Linux和Unix之间的各种版本/配置之间可能存在行为差异,因此我不想假设我所看到的是可移植的.

动机

(如果有人想知道我为什么想知道)

  1. 一般知识/好奇心.
  2. 我不喜欢目前用于处理ptys的命令行工具.没有进入细节,我已经看了reptyr,ptyget,expect/ empty,screen/ tmux(/ neercs?在一个与reptyr样功能),dtach/ abduco,和他们没有打我的简约多功能性的甜点.我正在努力变得更加明智,以便我可以更好地评估现有的解决方案和/或更好地设计我自己的工具来划伤我的特殊痒.

mtr*_*eur 4

感谢 StackOverflow 的相关问题建议和其他在线搜索,我找到了一个(部分?)答案:

  • 仅当您拥有主 FD 时,才能在 Linux 中的 PTY 上启用或禁用数据包模式 [请参阅本手册页中的 TIOCPKT ]
  • 仅当您拥有主 FD 时,才能在 Linux 中获取与 TTY 关联的会话 ID(不清楚这是否是预期/预期行为)[请参阅本手册页中的 TIOCGSID ]
  • 在实践中,重新调整 TTY 的大小只能从主 FD 移植(终端仿真器可能会在调整 TTY 大小时调整 TTY 的大小,但是仅具有从 FD 的应用程序无法真正确定主大小相应地调整大小,或者终端驱动程序甚至会接受来自从端的调整大小)。[来源]
  • 有一个技巧可以判断 TTY 的从端是否打开,如果没有主 FD,则无法做到这一点。[来源]
  • poll(2)主FD上的A可以获取POLLPRI从端上状态改变的事件(如果终端处于“分组模式”)。

当我了解更多信息时,我会尝试继续回来编辑此内容。