PTY - Linux手册页

时间:2019-08-20 18:02:01  来源:igfitidea点击:

Linux程序员手册 第7部分
更新日期: 2020-08-13

名称

pty-伪终端接口

说明

伪终端(有时缩写为" pty")是一对提供双向通讯通道的虚拟字符设备。通道的一端称为主端;另一端称为主端。另一端称为奴隶。

伪终端的从属端提供了一个行为,其行为与经典终端完全相同。预期连接到终端的进程可以打开伪终端的从属端,然后由已打开主端的程序来驱动。主端上写入的所有内容都将提供给从属端上的进程,就像它是在终端上输入的。例如,将中断字符(通常为Control-C)写入主设备将导致为与从设备连接的前台进程组生成中断信号(SIGINT)。相反,写入到伪终端的从属端的任何内容都可以由连接到主端的进程读取。

主站和从站之间的数据流是异步处理的,就像物理终端上的数据流一样。写入从机的数据将立即在主机上可用,但可能不会立即可用。类似地,在写入主机和从机可见效果之间可能会有小的处理延迟。

从历史上讲,已经发展了两个伪终端API:BSD和SystemV。SUSv1基于System V API标准化了伪终端API,并且该API应该在所有使用伪终端的新程序中使用。

Linux提供了BSD样式和(标准)系统V样式伪终端。系统V型终端在Linux系统上通常称为UNIX 98伪终端。

从内核2.6.4开始,BSD样式的伪终端被认为已弃用:在构建内核时,可以通过禁用CONFIG_LEGACY_PTYS选项来禁用支持。 (从Linux 2.6.30开始,默认情况下,在主线内核中禁用该选项。)在新应用程序中应使用UNIX 98伪终端。

UNIX 98 pseudoterminals

通过调用posix_openpt(3)打开未使用的UNIX 98伪终端主机。 (此函数将打开主克隆设备/ dev / ptmx;请参阅pts(4)。)执行任何特定于程序的初始化之后,使用grantpt(3)更改从属设备的所有权和权限,并使用unlockpt解锁从属设备。 (3)),可以通过在调用open(2)时传递ptsname(3)返回的名称来打开相应的从属设备。

Linux内核对可用的UNIX 98伪终端的数量施加了限制。在2.6.3及以下版本的内核中,此限制是在内核编译时(CONFIG_UNIX98_PTYS)配置的,允许的伪终端数量最多为2048,默认设置为256。自内核2.6.4起,此限制为可以通过/ proc / sys / kernel / pty / max进行动态调整,相应的文件/ proc / sys / kernel / pty / nr指示当前使用了多少个伪终端。有关这两个文件的更多详细信息,请参见proc(5)。

BSD pseudoterminals

BSD样式的伪终端以预先创建的对的形式提供,名称的形式为/ dev / ptyXY(主)和/ dev / ttyXY(从),其中X是16个字符集[p-za-e]中的字母, Y是来自16个字符集[0-9a-f]的字母。 (这两组字母的精确范围在UNIX实现中有所不同。)例如,/ dev / ptyp1和/ dev / ttyp1构成一个BSD伪终端对。进程通过尝试打开(2)每个伪终端主机直到打开成功找到未使用的伪终端对。然后可以打开相应的伪终端从站(在主站名称中用" tty"替换" pty")。

文件

/dev/ptmx
UNIX 98主克隆设备
/dev/pts/*
UNIX 98从属设备
/dev/pty[p-za-e][0-9a-f]
BSD主设备
/dev/tty[p-za-e][0-9a-f]
BSD从设备

备注

伪终端由诸如网络登录服务(ssh(1),rlogin(1),telnet(1))之类的应用程序,诸如xterm(1),script(1),screen(1),tmux(1)之类的终端仿真器使用,unbuffer(1)和expect(1)。

可在ioctl_tty(2)中找到控制包模式操作的TIOCPKT ioctl(2)的描述。

Linux尚未实现BSD ioctl(2)操作TIOCSTOPTIOCSTART,TIOCUCNTL和TIOCREMOTE。

另外参见

ioctl_tty(2),select(2),setsid(2),forkpty(3),openpty(3),termios(3),pts(4),tty(4)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/