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

时间:2016-01-08 22:07:59

标签: linux unix tty pty termios

问题:

如果我有一个pty或tty主/从对,如果我只有从节点的文件描述符,我可以做什么?或者,换句话说:如果我拥有主节点的文件描述符,我只能做什么?

我目前的理解:

[编辑]

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

[/编辑]

我猜明显的是:

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

还有别的吗?

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

动机

(如果有人想知道我想知道的原因)

  1. 一般知识/好奇心。
  2. 我不喜欢目前用于处理ptys的命令行工具。在没有详细说明的情况下,我查看了reptyrptygetexpect / emptyscreen / tmux(/ {{ 1}}?具有neercs - 类似功能的那个,reptyr / dtach,并且它们都没有达到我极简主义多功能性的甜点。我正在努力变得更加明智,这样我就可以更好地评估现有的解决方案和/或更好地设计我自己的工具来划伤我的特定痒。

1 个答案:

答案 0 :(得分:2)

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

  • 只有拥有主FD [See TIOCPKT at this manpage]
  • 才能在Linux上的PTY上启用或禁用数据包模式
  • 获取与Linux中的TTY关联的会话ID只能在拥有主FD(不清楚是否为预期/预期行为)的情况下才能完成[See TIOCGSID at this manpage]
  • 在实践中,重新调整TTY的大小只能从主FD中移植(终端仿真器可能会在调整大小时调整TTY的大小,但只有从属FD的应用程序无法确切地确定主大小相应地调整大小,或者终端驱动程序甚至会接受来自从端的调整大小)。 [Source]
  • 有一个技巧可以告诉TTY的从属端是否打开,如果你没有主FD,你就无法做到。 [Source]

我可能不会接受我自己的回答,除非我学到足够的答案,让我自己的答案详尽地回答这个问题,但我会继续回去编辑这个,因为我学到更多,直到这个或另一个答案充分回答它