PTY/TTY - 只有从属文件描述符,可以做什么事情?

10

问题:

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

我的当前理解:

我了解终端/控制台/SSH与人类接口的典型关系,以及一个或多个程序(例如一个shell和它的子进程)在从节点上。我(大致)了解更不寻常(/过时?)的用途,例如使用TTY进行其他类型的数据链接,如PPP。这个问题不是“我不明白TTY业务”的问题。我问的是(“低级”?)“API”相关的东西:例如,在没有访问主FD的情况下,是否存在任何termios/ioctl操作或其他编程更改TTY对,而无法完成?

我想最明显的是:

  • 如果我只有主节点的FD,我只能从主节点读取/写入。
  • grnatpt/unlockpt/ptsname仅可用于主节点的FD。

还有什么吗?

我一直在阅读一些手册并在我的Linux机器上进行试验:要做一个pty的基本事情(例如stty columns 78等),似乎在“任何一端”都可以工作。但是我认为只有拥有主节点的文件描述符的进程才能做一些事情(特别是因为主-从名称二分法意味着某种单方面控制/统治)。当然,由于我只在Linux上测试,所以可能会存在版本/配置之间的行为差异,因此我不想假设我看到的是可移植的。

动机

(以防有人想知道我为什么要知道)

  1. 一般知识/好奇心。
  2. 我不太喜欢目前用于处理 ptys 的命令行工具的选项。不详细说明,我已经看过 reptyrptygetexpect/emptyscreen/tmux(/neercs? 带有类似 reptyr 功能的那个)、dtach/abduco,但都不能满足我的简洁多功能需求。我正在努力学习,以便更好地评估现有解决方案和/或更好地设计自己的工具来满足我的特定需求。

你可以读/写两端口,它们有不同的功能。从设备是操作系统的终端设备,而主设备是你发送按键和接收程序输出的方式。 - that other guy
@thatotherguy 是的,谢谢:您的评论揭示了我的问题(和当前的理解)部分是含糊不清的。我已经编辑了帖子以澄清我的意思是如果有主节点的FD,自然就可以做到从主节点方面进行“读写”之类的事情,并概括地澄清我要求的内容。 - mtraceur
主从命名二分法暗示了一些单方面的控制/支配,但我不这么认为。这种二分法几乎与网络连接中的二分法相同:在开始时它不是对称的,但是一旦建立连接,一切都是对称的。主/从模拟计算机和终端仿真之间的通信线路。主表示启动/关闭连接(掌握连接)通常是从主端进行的。可能会有一些小的非对称性,但几乎像你自己回答中提到的那样棘手(调整术语大小是一种现代技巧 - GUI)。 - Jean-Baptiste Yunès
1个回答

4
感谢 StackOverflow 提供的相关问题建议以及其他在线搜索,自从我提出这个问题以来,我找到了一个(部分?)答案:
  • 在Linux上启用或禁用PTY的分组模式只能在拥有主FD的情况下完成。[请参见此man页上的TIOCPKT]
  • 仅在拥有主FD的情况下才能获取与TTY关联的会话ID,不清楚这是否是预期/预期行为。[请参见此man页上的TIOCGSID]
  • 从实践角度来看,调整TTY大小只能从主FD传输。 (当终端仿真器调整TTY大小时,TTY可能会被调整大小,但仅具有从设备FD的应用程序无法确定主机大小是否相应调整大小,或者终端驱动程序是否接受从从设备端的大小调整)。[来源]
  • 如果您没有主FD,则无法进行判断TTY的从设备端是否已打开的技巧。[来源]

我会尽力不断回来编辑这篇文章,随着我的学习而更新。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接