【问题标题】:PTY/TTY - What Can't You Do With Only Slave FDPTY/TTY - 只有 Slave FD 不能做什么
【发布时间】:2016-04-13 17:16:42
【问题描述】:

问题:

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

我目前的理解:

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

我想显而易见的是:

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

还有什么?

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

动机

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

  1. 一般知识/好奇心。
  2. 我不喜欢当前选择的用于处理 ptys 的命令行工具。在不深入细节的情况下,我查看了reptyrptygetexpect/emptyscreen/tmux(/neercs? 具有reptyr-like 功能的那个) ,dtach/abduco,它们都没有达到我极简多功能的甜蜜点。我正在努力获得更多信息,以便更好地评估现有解决方案和/或更好地设计自己的工具来解决我的特殊需求。

【问题讨论】:

  • 你可以读/写两端,它们做不同的事情。从机是操作系统的终端设备,而主机是发送按键和接收程序输出的方式。
  • @thatotherguy 是的,谢谢:您的评论表明我的问题(和当前理解)部分含糊不清。我已经编辑了这篇文章,以澄清我的意思是从主控端“读/写”是一个自然只能在拥有主节点的 FD 的情况下才能做的事情之一,并且通常澄清我的要求。
  • 主从名称二分法暗示一些单方面的控制/支配,我会说不。二分法与网络连接几乎相同:一开始它不是对称的,但一旦建立连接,一切都是对称的。主/从仿真计算机和终端仿真之间的通信线路。 Master 意味着启动/关闭连接(控制连接)是(通常)来自主端。正如您在自己的答案中提到的那样,可能会有一些不对称的小事情,但几乎很棘手(调整术语大小是一种现代技巧 - GUI)。

标签: linux unix tty pty termios


【解决方案1】:

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

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

随着我了解更多信息,我会尝试继续编辑此内容。

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 2021-03-18
    • 2016-11-20
    • 2011-08-23
    • 1970-01-01
    • 2014-08-13
    • 2014-03-05
    • 2018-05-30
    • 1970-01-01
    相关资源
    最近更新 更多