linux伪终端开发

linux伪终端开发

浏览次数:
信息来源: 用户投稿
更新日期: 2026-06-15
文章简介

linuxptys是指Linux伪终端,而伪终端则是指伪终端master和伪终端slave这一对字符设备;其中的slave对应“/dev/pts/”目录下的一个文件,而master则在内存中标识

2025阿里云双十一服务器活动

linuxptys是指Linux伪终端,而伪终端则是指伪终端master和伪终端slave这一对字符设备;其中的slave对应“/dev/pts/”目录下的一个文件,而master则在内存中标识为一个文件描述符;伪终端由终端模拟器提供,终端模拟器是一个运行在用户态的应用程序。

本教程操作环境:linux5.9.8系统、DellG3电脑。

linuxptys是什么?

我们常说的终端分为终端tty1-6和伪终端。使用tty1-6的情况一般为Linux系统直接连了键盘和显示器,或者是使用了vSphereconsole等虚拟化方案,其它情况下使用的都是伪终端。本文将介绍伪终端的基本概念。本文中演示部分使用的环境为ubuntu18.04。

伪终端(pseudoterminal,有时也被称为pty)是指伪终端master和伪终端slave这一对字符设备。其中的slave对应/dev/pts/目录下的一个文件,而master则在内存中标识为一个文件描述符(fd)。伪终端由终端模拟器提供,终端模拟器是一个运行在用户态的应用程序。

Master端是更接近用户显示器、键盘的一端,slave端是在虚拟终端上运行的CLI(CommandLineInterface,命令行接口)程序。Linux的伪终端驱动程序,会把master端(如键盘)写入的数据转发给slave端供程序输入,把程序写入slave端的数据转发给master端供(显示器驱动等)读取。请参考下面的示意图(此图来自互联网):

我们打开的终端桌面程序,比如GNOMETerminal,其实是一种终端模拟软件。当终端模拟软件运行时,它通过打开/dev/ptmx文件创建了一个伪终端的master和slave对,并让shell运行在slave端。当用户在终端模拟软件中按下键盘按键时,它产生字节流并写入master中,shell进程便可从slave中读取输入;shell和它的子程序,将输出内容写入slave中,由终端模拟软件负责将字符打印到窗口中。

伪终端大概有三类使用场景:

  • 像xterm、gnome-terminal等图形界面的终端模拟软件将键盘和鼠标事件转换为文本输入,并图形化地显示输出内容
  • 远程shell应用程序(如sshd)在客户机上的远程终端和服务器上的伪终端之间中继输入和输出
  • 多路复用器应用,如screen和tmux。它们把输入和输出从一个终端转播到另一个终端,使文本模式的应用程序从实际的终端上脱离
  • Linux中为什么要提出伪终端这个概念呢?shell等命令行程序不可以直接从显示器和键盘读取数据吗?为了同屏运行多个终端模拟器、并实现远程登录,还真不能让shell直接跨过伪终端这一层。在操作系统的一大思想——虚拟化的指导下,为多个终端模拟器、远程用户分配多个虚拟的终端是有必要的。上图中的shell使用的slave端就是一个虚拟化的终端。Master端是模拟用户一端的交互。之所以称为虚拟化的终端,是因为它除了转发数据流外,还要有点终端的样子。

    linux伪终端开发

    /dev/ptmx是一个字符设备文件,当进程打开/dev/ptmx文件时,进程会同时获得一个指向pseudoterminalmaster(ptm)的文件描述符和一个在/dev/pts目录中创建的pseudoterminalslave(pts)设备。通过打开/dev/ptmx文件获得的每个文件描述符都是一个独立的ptm,它有自己关联的pts,ptmx(可以认为内存中有一个ptmx对象)在内部会维护该文件描述符和pts的对应关系,对这个文件描述符的读写都会被ptmx转发到对应的pts。我们可以通过lsof命令查看ptmx打开的文件描述符:

    $sudolsof/dev/ptmx

    一般情况下我们通过远程连接的方式执行命令时,进程的标准输入、标准输出和标准错误输出都会绑定到伪终端上,下面是一个简单的demo程序:

    include<unistd.h>intmain()

    }

    把这段代码保存在文件mydemo.c中,然后执行下面的命令编译并执行该程序:

    $https://www.fruan.com/post/demo

    demo程序输出了自己进程的PID,现在另外开一个终端执行lsof命令:

    $lsof-p17981

    可以看到进程的0u(标准输入)、1u(标准输出)、2u(标准错误输出)都绑定到了伪终端/dev/pts/0上。

    推荐学习:《linux视频教程》

    以上就是linuxptys是什么的详细内容,更多请关注主机测评网其它相关文章!

    标签:
    每月更新阿里云优惠活动汇总(阿里云服务器优惠活动)
    « 上一篇
    返回列表
    下一篇 »

    如本文对您有帮助,就请抽根烟吧!