PTY/TTY - 仅使用 Slave FD 有什么不能做的

问题描述 投票:0回答:1

问题:

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

我目前的理解:

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

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

我一直在阅读一些手册页并在我的 Linux 机器上进行实验:人们想要用 pty 做的基本事情(例如

stty columns 78

等)似乎可以在“任一端”工作。但我怀疑只有持有主端文件描述符的进程才能做一些事情(特别是因为主从名称二分法表明一些单方面控制/统治)。当然,由于我只在 Linux 上进行测试,Linux 的不同版本/配置与 Unix 之间可能存在行为差异,所以我不想假设我所看到的东西是可移植的。

动机

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

常识/好奇心。
  1. 我不喜欢当前选择的用于使用 ptys 的命令行工具。在不深入细节的情况下,我查看了
  2. reptyr
  3. ptyget
    expect
    /
    empty
    screen
    /
    tmux
    (/
    neercs
    ?具有类似
    reptyr
    功能的那个) ,
    dtach
    /
    abduco
    ,但它们都没有达到我对简约多功能性的最佳状态。我正在努力获得更多信息,以便我可以更好地评估现有解决方案和/或更好地设计我自己的工具来满足我的特定需求。
    
        
linux unix tty pty termios
1个回答
4
投票

只有在拥有主 FD 的情况下,才能在 Linux 中的 PTY 上启用或禁用数据包模式 [
    请参阅本手册页中的 TIOCPKT
  • ] 只有在您拥有主 FD 时才能在 Linux 中获取与 TTY 关联的会话 ID(不清楚这是否是预期/预期行为)[
  • 请参阅本手册页中的 TIOCGSID
  • ] 在实践中,重新调整 TTY 的大小只能从主 FD 移植(终端仿真器可能会在调整 TTY 大小时调整 TTY 的大小,但只有从 FD 的应用程序无法真正确定主大小是否相应调整,或者终端是否相应调整大小)驱动程序甚至会接受来自从端的调整大小)。 [
  • 来源
  • ] 有一个技巧可以判断 TTY 的从属端是否打开,如果您没有主 FD,则无法做到这一点。 [
  • 来源
  • ] 主FD上的
  • poll(2)
    可以获取从端状态变化的
    POLLPRI
    事件(如果终端处于“分组模式”)。
    
    
  • 随着我了解更多,我会尝试继续回来编辑此内容。

© www.soinside.com 2019 - 2024. All rights reserved.