进一步阅读

进一步阅读

从 Linux 编程接口

关于伪终端的关键点是从设备看起来就像一个标准终端。所有可以应用于终端设备的操作也可以应用于伪终端从设备。其中一些操作对于伪终端来说没有意义(例如,设置终端线路速度或奇偶校验),但是没关系,因为伪终端从机会默默地忽略它们。

对于面向终端的程序来说,从设备就像一个标准终端。此外,就像控制终端程序的进程的终端。

主设备对于驱动程序来说是否就像一个标准终端?如果是的话,就像控制终端一样?如果不是,类似设备文件或常规文件但不一定是终端的设备文件?

谢谢。

在此输入图像描述

答案1

主设备看起来像一个终端设备文件,具有可通过tcgetattr()/ tcsetattr()/&c 访问的线路规则。并取得成功isatty()。事实上它是相同线路规则实例作为从设备,这就是主机端的程序将窗口大小变化等信息传输给从机端的程序的方式。这也是主端程序通过将线路速度设置为零来发出(模拟的)调制解调器挂断信号的方式,从而触发线路规则的挂断机制。 (因此,文本中关于线速度的说法是不正确的。有线速度有意义的情况。)

区别在于读/写 I/O。读取的是字符序列,对于真实终端来说,这些字符序列将通过实际的底层串行设备发送。对于真实终端来说,写入的是由实际底层串行设备接收的字符序列。换句话说:它是另一边按线路学科进行规范/非规范输入和输出处理。

这有一些复杂性,即数据包模式远程模式。后者早已废弃不用,即使在本世纪初,大多数操作系统中也不存在,因此需要对 Daniel J. Bernstein 的旧 pty 工具进行补丁。前者对于大多数任务来说并不是特别有用,因此我不会在这个答案中详细介绍它。

主设备一般是不是主控端进程运行的会话的控制终端。从概念上讲,这将类似于内部结构真实终端位于错误的位置。此类会话的控制终端是(如果存在的话)其他终端。

script对于诸如NeoVIM :terminal、emacs 和ptybandage(如果不是管道的一部分) 等程序来说,情况就是如此,它们直接渲染到另一个终端设备并在该终端设备控制的交互式会话中运行。

SSH 服务器、GUI 终端仿真器则不是这种情况,console-terminal-emulator来自 nosh 工具集ptyrun(正常使用时)或单片帧缓冲终端模拟器,例如 zhcon。这些渲染到各种不同的 I/O 设备,从文件系统中的缓冲区和 FIFO(console-terminal-emulator通过 TCP 套接字)到帧缓冲区和 HID 类设备,这些设备都不是终端。此外,console-terminal-emulatorSSH 服务器和帧缓冲终端仿真器通常在守护进程上下文中调用,当然,会话开始时没有控制终端。

请注意,该图并不是确定的。主端进程不一定会派生从属端进程。例如,在nosh-toolset用户空间虚拟终端中,从端进程是普通ttylogin@*服务,由服务管理器分叉,主端的模拟器进程与主端的登录会话进程之间没有直接的进程关系。奴隶一方。但这超出了本答案的范围。

进一步阅读

答案2

主设备看起来大多像一个管道。您可以像管道一样读取和写入其文件描述符,其大小适合您。您将得到简短的读取,因此请务必检查 read(2) 返回的内容。

相关内容