AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 446083
Accepted
Tim
Tim
Asked: 2018-05-26 14:37:32 +0800 CST2018-05-26 14:37:32 +0800 CST 2018-05-26 14:37:32 +0800 CST

主设备看起来就像驱动程序的标准终端吗?

  • 772

从 Linux 编程接口

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

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

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

谢谢。

在此处输入图像描述

pty
  • 2 2 个回答
  • 274 Views

2 个回答

  • Voted
  1. Best Answer
    JdeBP
    2018-05-27T03:14:24+08:002018-05-27T03:14:24+08:00

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

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

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

    主设备一般不是主端进程运行的会话的控制终端。这将在概念上将类似于真实终端内部的东西放在错误的位置。此类会话的控制终端(如果有的话)是另一个终端。

    对于诸如scriptNeoVIM :terminal、emacs 和ptybandage(如果不是管道的一部分)这样的程序将是这种情况,它们直接呈现到另一个终端设备并在由该终端设备控制的交互式会话中运行。

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

    请注意,该图不是确定的。主端进程不一定会分叉从端进程。以nosh-toolset用户空间虚拟终端为例,slave端进程是普通ttylogin@*服务,由服务管理器fork出来,master端的emulator进程与主端的login session进程没有直接的进程关系奴隶一方。但这超出了这个答案的范围。

    进一步阅读

    • https://unix.stackexchange.com/a/177209/5132
    • https://unix.stackexchange.com/a/249801/5132
    • 乔纳森·德博因·波拉德 (2018)。“用户空间虚拟终端”。 小吃指南。1.38。点心。JdeBP 的软件。
    • 乔纳森·德博因·波拉德 (2018)。快速浏览用户空间虚拟终端 nosh。JdeBP 的软件。
    • 2
  2. stolenmoment
    2018-05-27T01:35:34+08:002018-05-27T01:35:34+08:00

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

    • 1

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve