- 9
- 0
- 约2.42万字
- 约 22页
- 2017-06-04 发布于河南
- 举报
019_伪终端
下载
下载
第1 9章 伪 终 端
19.1 引言
第9章介绍进行终端登录时,需要通过一个终端设备自动提供终端的语义。在终端和运行
程序之间有一个终端行规程(见图 11 - 2),通过这个规程我们能够在终端上设置特殊字符(退
格、行删除、中断等)。但是,当一个登录请求到达网络连接时,终端行规程并不是自动被加
载到网络连接和登录程序 s h e l l之间的。图9 - 5显示了一个伪终端设备驱动程序被用来提供终端
语义。
除了用于网络登录,伪终端还被用在其他方面,本章将对此进行介绍。我们将首先提供
S V R 4和4 . 3 + B S D系统下用于创建伪终端的函数,然后使用这些函数编写一个程序用来调用 p t y 。
我们将看到这个程序的各种使用:在输入字符和终端显示之间进行转换( B S D 的码转换程序)
和运行协同进程来避免程序 1 4 - 1 0中遇到的缓存问题。
19.2 概述
伪终端(pseudo terminal )这个名词暗示了与一个应用程序相比,它更加像一个终端。但
事实上,伪终端并不是一个真正的终端。图 1 9 -
1显示了使用伪终端的进程的典型结构。其中
用户进程 用户进程
关键点如下:
(1) 通常一个进程打开伪终端主设备然后
调用f o r k 。子进程建立了一个新的对话,打开
一个相应的伪终端从设备,将它复制成标准输 读、写函数 读、写函数
入、标准输出和标准出错,然后调用 e x e c 。伪
终端从设备成为子进程的控制终端。
(2) 对于伪终端从设备之上的用户进程来 终端行规程
说,其标准输入、标准输出和标准出错都能当 内核
作终端设备使用。用户进程能够调用第 11章中
讲到的所有输入/输出函数。但是因为在伪终端 伪终端主设备 伪终端从设备
从设备之下并没有真正的设备,无意义的函数
调用(改变波特率、发送中断符、设置奇偶校
验等)将被忽略。
(3) 任何写到伪终端主设备的输入都会作 图19-1 典型的伪终端进程结构
为从设备端的输入,反之亦然。事实上所有从
设备端的输入都来自于主设备上的用户进程。这看起来就像一个流管道(见图 1 5 - 3),但从设
备上的终端行规程使我们拥有普通管道之外的其他处理能力。
图1 9 - 1显示了B S D 系统中的伪终端结构。 1 9 . 3 . 2节将介绍如何打开这些设备。在 S V R 4系统
中伪终端是使用流系统来创建的(见 1 2 . 4节)。图1 9 - 2详细描述了 S V R 4系统中各个伪终端模块
第 1 9章 伪 终 端 4 7 7
下载
之间的关系。虚线框中的两个流模块是可选的。请注意从设备上的三个流模块同程序 1 2 - 1 0
(网络登录)的输出是一样的。1 9 . 3 . 1节将介绍如何组织这些流模块。
从现在开始将简化以上图示,首先不再画出图 1 9 - 1的“读、写功能”或图 1 9 - 2的流首。使
用缩写“p t y ”表示伪终端,并将图 1 9 - 2中所有伪终端从设备之上的流模块集合表示为“终端
行规程”模块。
用户进程 用户进程
流首 流首
流模块
流模块
原创力文档

文档评论(0)