【发布时间】: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 的不同版本/配置之间可能存在行为差异,所以我不想假设我所看到的内容是可移植的。
动机
(如果有人想知道我为什么想知道)
- 一般知识/好奇心。
- 我不喜欢当前选择的用于处理 ptys 的命令行工具。在不深入细节的情况下,我查看了
reptyr、ptyget、expect/empty、screen/tmux(/neercs? 具有reptyr-like 功能的那个) ,dtach/abduco,它们都没有达到我极简多功能的甜蜜点。我正在努力获得更多信息,以便更好地评估现有解决方案和/或更好地设计自己的工具来解决我的特殊需求。
【问题讨论】:
-
你可以读/写两端,它们做不同的事情。从机是操作系统的终端设备,而主机是发送按键和接收程序输出的方式。
-
@thatotherguy 是的,谢谢:您的评论表明我的问题(和当前理解)部分含糊不清。我已经编辑了这篇文章,以澄清我的意思是从主控端“读/写”是一个自然只能在拥有主节点的 FD 的情况下才能做的事情之一,并且通常澄清我的要求。
-
主从名称二分法暗示一些单方面的控制/支配,我会说不。二分法与网络连接几乎相同:一开始它不是对称的,但一旦建立连接,一切都是对称的。主/从仿真计算机和终端仿真之间的通信线路。 Master 意味着启动/关闭连接(控制连接)是(通常)来自主端。正如您在自己的答案中提到的那样,可能会有一些不对称的小事情,但几乎很棘手(调整术语大小是一种现代技巧 - GUI)。
标签: linux unix tty pty termios