介绍
最近在研究有关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表现得就像物理终端设备一样,因此应用程序就无需在意它们在使用的是何种设备。
在伪设备可用之前,它的权限必须设置,以便应用程序可以访问它。