如果我有一个pty或tty主/从对,如果我只有从节点的文件描述符,我怎么办?或者,换句话说:如果我拥有主节点的文件描述符,我该怎么做?
我目前的理解:
[编辑]
我理解终端/控制台/ SSH的“典型”关系,其具有用于与人交互的主端,以及在从端上的一个或多个程序(例如,shell及其子进程).我(松散地)了解更多不寻常的(/古老?)用例,例如将TTY用于其他类型的数据链接,如PPP.这个问题不是“我没有得到这个TTY业务”的问题.我问的是(“低级”?)“API”的东西:例如是否存在对tty对的任何termios / ioctl操作或其他编程更改,如果您无法访问主FD,则无法完成?
[/编辑]
我想明显的是:
>如果我有主端FD,我只能从主端读/写.
> grantpt / unlockpt / ptsname只能在主端FD上使用.
还要别的吗?
我一直在阅读一些手册页并在我的Linux机器上进行实验:人们想要用pty做的基本内容(例如stty专栏78等)似乎在“两端”上工作.但我怀疑只有一个进程持有主端的文件描述符才能做到(特别是因为主从名称二分法暗示了一些单边控制/统治).当然,因为我只是在Linux上进行测试,所以Linux和Unix之间的各种版本/配置之间可能存在行为差异,所以我不想假设我所看到的是可移植的.
动机
(如果有人想知道我为什么想知道)
>一般知识/好奇心.
>我不喜欢当前选择使用ptys的命令行工具.没有进入细节,我看了reptyr,ptyget,expect / empty,screen / tmux(/ neercs?具有reptyr-like功能的那个),dtach / abduco,并且没有一个打到我的极简主义多功能的甜点.我正在努力变得更加明智,以便我可以更好地评估现有的解决方案和/或更好地设计我自己的工具来划伤我的特殊痒.
解决方法
>只有拥有主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]
我可能不会接受我自己的答案,除非我学到足够的答案,让我自己的答案详尽地回答这个问题,但我会继续回去编辑这个,因为我学到了更多,直到这个或另一个答案充分回答它.