为什么 Fedora 有两个“ptmx”文件?

为什么 Fedora 有两个“ptmx”文件?

我知道该文件/dev/ptmx用于生成伪终端的主文件。但我发现Fedora还有另一个ptmx文件( /dev/pts/ptmx):

在此输入图像描述

第二个文件的目的是什么?

答案1

与计算世界中的许多事情一样,原因是历史和向后兼容性。

早在 2.4.* 内核中,在 Linux 中存在udev(当前的虚拟文件系统解决方案/dev)之前,有两种相互竞争的解决方案:将设备放在根文件系统上的真实目录中的“传统 Unix 方式”,以及devfs第一个虚拟文件系统。的文件系统解决方案/dev

问题是,作者devfs为各种设备构建了一个全新的命名方案,人们对此有相当强烈的感觉:一些人希望迁移到新方案并废除旧方案,另一些人则认为没有迁移的必要。一些发行版使用旧的静态设备,其他发行版则选择devfs.

此时,安装时会创建固定数量的伪 TTY 设备。 (顺便说一句,如果CONFIG_LEGACY_PTYS在编译内核时设置了该选项,这仍然是可能的。)

然后,引入了Unix98风格的动态分配PTY设备。在静态/dev目录上实现它们需要一个虚拟文件系统/dev/pts,这被称为devpts文件系统。此外,将其作为单独的文件系统可能也可以将其应用在动态之上,devfs而无需重复代码。

动态分配的 PTY 设备很快成为最受欢迎的选择,因为/dev数百个静态分配的 PTY 设备杂乱无章,其中大多数很可能在系统的生命周期中永远不会使用,这显然是荒谬的。

然后 Linux 2.6udev随之而来。它很快就淘汰了静态/devdevfs解决方案。出于向后兼容性的原因,devpts文件系统仍然存在,但现在相同的功能可以移回主/dev文件系统,因为它现在完全基于 RAM。

例如,今天,Debian 9 仍然挂载devpts文件系统以/dev/pts实现旧版兼容性,但/dev/pts/ptmx默认分配零权限 - 这表明该devpts文件系统可能已被弃用,并将在将来的某个时候被删除。

# ls -l /dev/ptmx /dev/pts/ptmx
crw-rw-rw- 1 root tty  5, 2 Nov 22 11:47 /dev/ptmx
c--------- 1 root root 5, 2 Nov 12 14:59 /dev/pts/ptmx

如果某些程序仍然需要/dev/pts/ptmx,可以通过调整默认权限来允许,但这可以让人们知道哪些程序仍在使用旧的已弃用的设备名称。

答案2

当进程打开 /dev/ptmx 时(使用posix_openpt()),它获取伪终端主设备(PTM)的文件描述符,并在 /dev/pts 目录中创建伪终端从设备(PTS)。

当主设备打开时,从设备被锁定。您可以获取从站的名称并设置其权限等,然后解锁从站。这允许在从属设备可访问之前对其进行控制。

从机模拟真实的文本终端设备,主机提供终端仿真器进程控制从机的方法。

从设备是物理终端的虚拟实现,主设备是在该终端上打字的虚拟实现;计算机对待发送到从机的字符就像人类在真实终端上键入它们一样(受创建主机时的权限设置的限制)。

相关内容