终端仿真器和TTY设备之间的关系是什么?

时间:2016-04-12 04:30:04

标签: linux tty terminal-emulator

我发现this很棒的文字解释了很多关于TTY设备的内容。它侧重于TTY设备和shell(及其衍生作业)之间的关系。但它对终端仿真器和TTY设备之间的关系几乎没有说明;现在我对此感到疑惑。我用Google搜索,但我找不到答案......

1)终端仿真器负责什么样的输入逻辑?它只是将每个字符代码(由窗口事件接收)发送到TTY设备,或者在传输到TTY之前/期间进行更复杂的处理?以及如何将这些字符代码发送到TTY设备?通过文件?

2)在前台进程调用write()到TTY设备文件a.k.a。stdout / stderr后,会发生什么?这些数据如何到达终端仿真器进程,因此可以呈现?再次,通过文件?

3)终端仿真器是否负责"分配"一个TTY设备?可以随时创建TTY设备"内核,还是内核可以管理的有限数量的可用TTY设备?

1 个答案:

答案 0 :(得分:3)

首先,回答一下终端是什么。

历史上,终端设备中某些愚蠢的设备将输出字符从程序转换为某些输出设备(打印机或阴极射线管)中的可见图形,并通过序列号。

从这个角度来看,终端仿真器是一些软件应用程序,通常在计算机上运行,​​该计算机尚未设计为充当终端设备以使其表现如此。通常,这意味着它将从串行线路接收输入以输出给用户(例如,在屏幕上的特定窗口中),并将处理该窗口上的用户输入并将其发送到远程计算机以在程序运行中进行处理那里。

相比之下,tty线是用于发送和接收字符的串行线。在UNIX中,他们曾经有一个公共驱动程序,它对来自实际终端的接收字符进行了一些处理。例如,unix驱动程序收集所有字符,允许通过使用退格键进行一些编辑,并且只有在用户(终端)发送RETURN键后,才能将此数据提供给计算机上运行的程序。

前段时间,需要有虚拟终端设备(没有实际终端的设备,而是另一个程序)需要运行几个用于编程连接的程序设备(例如,不将密码字符回送到终端,或逐字符输入,而不是逐行),并允许虚拟TTY程序中的驱动程序作用于这些程序。

虚拟终端设备成对出现,终端仿真程序获取虚拟终端的主端,在从属部分运行实际程序(例如登录shell以允许基于Windows的伪终端)

现在回答你的问题:

1)终端输入逻辑在从设备的虚拟终端驱动程序上进行管理,就好像在其上运行的程序完全控制字符映射或行/原始输入一样。顺便说一句,附加到主端的程序只获取原始字符,没有任何解释,因此它可以,例如,发送一个Control-C字符来中断在从属端运行的程序。

2)当在从属端运行的程序执行写操作时,此写操作将通过tty驱动程序进行,这使得所有线条规则的假设(例如,在任何LF字符之前添加CR char以生成CRLF顺序,在终端熟化操作模式的情况下)在主端运行的程序将接收原始字符(甚至,例如由程序写入的Ctrl-C)在输入时,tty设备转换输入字符(Ctrl的情况) -C)并将适当的信号发送到附加到该伪终端的进程组。

3)从历史上看,终端作为设备对出现(作为一种特定类型的终端字符设备驱动程序),因此,它们具有主要/次要数字对的inode。这会将其数量限制为正确配置的管理值。如今,Linux可以动态分配设备,从而可以动态分配设备对。但最大数量仍然有限(出于效率和实施原因)

相关问题