UNIX伪终端

介绍

最近在研究有关UNIX的相关理论知识,在此记录相关重要概念备忘。

概述

伪终端是指,对于一个应用程序而言,它看似一个终端,但事实上它并不是一个真正的终端。

通常一个进程打开伪终端主设备,调用fork。子进程建立一个新的会话,打开一个相应的伪终端从设备,将其文件描述符复制到标准输入输出错误,然后调用exec。伪终端从设备称为子进程的控制终端。

看起来像一个双向管道,从设备上的终端行规程使得我们拥有普通管道没有的其他处理能力。

伪终端的典型用途

网络登录服务器

最典型的例子是telnetd和rlogind服务器。
在rlogind服务器和登录shell之间有两个exec调用,这是因为login程序通常在两个exec之间检验用户是否合法。

窗口系统终端模拟

终端模拟器最为shell和窗口管理器之间的媒介。每个shell在自己的窗口中执行。
shell将自己的标准输入、标准输出、标准错误连接到PTY的从设备端。

script程序

script程序将终端会话期间的所有输入和输出信息复制到一个文件中。
使用script的不足是必须处理文件中的控制字符。

expect程序

在非交互模式中驱动交互模式运行。

运行协同进程

当通过管道与协同进程通信时,标准I/O库会完全缓冲标准输入和标准输出,从而引起死锁。
现在协同进程的标准输入和标准输出就像终端设备一样,所以标准I/O库会将这两个流设置为行缓冲。

观看长时间运行程序的输出

由于重定向到文件时,标准I/O库将完全缓冲它的标准输出。

打开伪终端设备

PTY表现得就像物理终端设备一样,因此应用程序就无需在意它们在使用的是何种设备。
在伪设备可用之前,它的权限必须设置,以便应用程序可以访问它。