mat*_*scp 5 linux tty terminal-emulator
我发现这篇很棒的文字解释了很多有关 TTY 设备的内容。它重点关注 TTY 设备和 shell(及其衍生的作业)之间的关系。但它很少提及终端仿真器和 TTY 设备之间的关系;现在我想知道这一点。我用谷歌搜索,但找不到答案......
1)终端仿真器负责什么样的输入逻辑?它只是将每个字符代码(通过窗口事件接收)发送到 TTY 设备,还是在传输到 TTY 之前/期间进行更复杂的处理?这些字符代码是如何发送到TTY设备的呢?通过文件?
2) 前台进程调用write()TTY 设备文件(又名stdout/ )后stderr,会发生什么?这些数据如何到达终端仿真器进程并进行渲染?再次,通过文件?
3) 终端仿真器是否负责“分配”TTY 设备?TTY 设备可以由内核“即时”创建,或者内核可以管理的可用 TTY 设备数量是否有限?
首先,回答自己什么是终端。
从历史上看,终端设备中的一些哑设备将输出字符从程序转换为某些输出设备(打印机或阴极射线管)中的可见图形,并通过串行线将输入字符发送到程序(在本地键盘上生成)。
从这个角度来看,终端仿真器是某种软件应用程序,通常在计算机上运行,而该计算机并未被设计为充当终端设备以使其具有终端设备的行为。通常,这意味着它将接收来自串行线路的输入以输出给用户(例如在屏幕上的特定窗口中),并将处理该窗口上的用户输入并将其发送到远程计算机以在运行的程序中进行处理那里。
相比之下,tty 线路是用于发送和接收字符的串行线路。在 UNIX 中,它们曾经有一个通用的驱动程序,对从实际终端接收到的字符进行一些处理。例如,unix 驱动程序收集所有字符,允许通过使用退格键进行一些编辑,并且仅在用户(终端)发送 RETURN 键后才将这些数据提供给计算机上运行的程序。
不久前,需要有虚拟终端设备(后面没有实际终端,而是另一个程序的设备),需要运行多个用于对连接设备进行编程的程序(例如,不回显密码字符)返回到终端,或者逐字符输入,而不是逐行输入),并允许虚拟 TTY 程序中的驱动程序根据这些编程进行操作。
虚拟终端设备成对出现,终端模拟程序获得虚拟终端的主端,在从属部分运行实际程序(例如,允许基于 Windows 的伪终端的登录 shell)
现在回答您的问题:
1) 终端输入逻辑在从设备的虚拟终端驱动程序上进行管理,就好像在其上运行的程序完全控制字符映射或行/原始输入一样。顺便说一下,连接到主机端的程序只获取原始字符,没有任何解释,因此它可以发送一个 Control-C 字符来中断从机端运行的程序。
2) 当在从机端运行的程序进行写入时,该写入会通过 tty 驱动程序,这会进行行规则的所有假设(例如,在任何 LF 字符之前添加一个 CR 字符以形成 CRLF 序列,在终端熟操作模式的情况)在主端运行的程序将接收原始字符(甚至,例如由程序编写的 Ctrl-C) 在输入时,tty 设备转换输入字符(Ctrl-C 的情况)并向附加到该伪终端的进程组发送正确的信号。
3) 从历史上看,终端以设备对的形式出现(作为一种特定类型的终端字符设备驱动程序),因此,它们具有带有主/次数字对的 inode。这将它们的数量限制为正确配置的管理值。如今,例如linux,允许动态分配设备,使得动态分配设备对成为可能。但最大数量仍然受到限制(出于效率和实施原因)
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |