美文网首页LinuxLinux学习之路
APUE读书笔记-19伪终端(3)

APUE读书笔记-19伪终端(3)

作者: QuietHeart | 来源:发表于2020-09-29 17:15 被阅读0次

伪终端的典型应用

我们现在将会看看一些伪终端的典型使用。

网络登录服务

伪终端被编译成支持网络登录的服务。典型的例子就是telnetd和rlogind服务。第15章给出了rlogin服务的具体步骤。当登录shell运行在远程主机上面的时候,我们会有下面图形的结构。使用telnetd服务也会有类似的结构。

rlogind服务进程的组织结构

       +--------------------+   fork     +-----------+
       |      rlongind      +------------>   login   |
       |       server       | exec,exec  |   shell   |
       +----/-----^---\---^-+            +---|----^--+
           /     /     \   \          stdout |    |stdin
          /     /       |   \         stderr |    |
+......../...../........|...|................|....|.........+
.   +---v-----/----+    |   |           +----v----|-----+   .
.   |    TCP/IP    |    |   |           |    terminal   |   .
.   +---|-----^----+    |   |           |line discipline|   .
.       |     |         \    \          +----|----^-----+   .
.       |     |          \    \              |    |         .
.   +---v-----|----+    +-v----\---+       +-v----|--+      .kernel
.   |    network   |    |   PTY    |       |   PTY   |      .
.   | device driver|    |  master  |       |  slave  |      .
.   +------^-------+    +-|----^---+       +-|----^--+      .
.          |              |    |             v    |         .
.          |              v    +<------------+    |         .
.          |              +---------------------->+         .
+..........|................................................+
           v
  ...................
        network

我们在rlogind服务和loginshell之间两次调用exec,因为login程序会在两者之间,用来用户验证。

上面这个图形中的一个比较关键的地方就是驱动PTY master的进程一般同时都会也读取另外一个I/O stream。在这个途中,另外的I/O stream就是 TCP/IP box。这也意味着进程必须使用一些多I/O的形式,例如select或者poll,或者必须被分割成两个进程或者线程。

script 程序

script程序由大多数的UNIX系统提供,它会将终端会话过程中的任何输入输出拷贝到一个文件中去。这个程序通过将它自身放置在终端和我们新启动的一个登陆shell之间来做到这个。下面的图详细列出了script程序的交互。这里我们特别指出script程序一般从一个登陆的shell中运行,然后这个登陆的shell等待script终止。

script程序的终端结构

                        +-----------+
                        |script file|
                        +-----^-----+
                              |
+-----------+ fork +----------|---------+   fork     +-----------+
|login shell+------>  script process    +------------>   shell   |
+-----------+ exec +----/-----^---\---^-+   exec     +---|----^--+
 (sleeping)            /     /     \   \          stdout |    |stdin
                      /     /       |   \         stderr |    |
            +......../...../........|...|................|....|.........+
            .   +---v-----/-----+   |   |           +----v----|-----+   .
            .   |    terminal   |   |   |           |    terminal   |   .
            .   |line discipline|   |   |           |line discipline|   .
            .   +---|-----^-----+   \    \          +----|----^-----+   .
            .       |     |          \    \              |    |         .
            .   +---v-----|-----+   +-v----\---+       +-v----|--+      .kernel
            .   |    terminal   |   |   PTY    |       |   PTY   |      .
            .   | device driver |   |  master  |       |  slave  |      .
            .   +------^--------+   +-|----^---+       +-|----^--+      .
            .          |              |    |             v    |         .
            .          |              v    +<------------+    |         .
            .          |              +---------------------->+         .
            +..........|................................................+
                       v
                   - - - - --
                  / user at a\
                  \ terminal /
                   - - - - --

当script运行的时候,任何经过PTY slave上面的终端行规则的输出都会被拷贝到script file(一个script的文件)中去(一般被称作typescript)。因为我们的键盘键入一般通过那个行规则模块来显示,所以script file也会包含我们的输入。然而由于密码不会被显示出来,所以script file不会包含我们输入的任何密码。

当写这本书的第一个版本的时候,作者Rich Stevens使用script程序来捕获例子程序的输出。这个避免了相比较他自己手动来拷贝这些程序的输出,导致的印刷上面可能遇到的错误。然而,script程序的缺点就是,需要处理出现在script file中的控制字符。

在后面写的pty程序的时候,我们将会看到一个简单的shell脚本将这个程序变成一个script程序。

相关文章

  • APUE读书笔记-19伪终端(3)

    伪终端的典型应用 我们现在将会看看一些伪终端的典型使用。 网络登录服务 伪终端被编译成支持网络登录的服务。典型的例...

  • APUE读书笔记-19伪终端(15)

    (6)通过非交互的方式驱动交互程序 尽管我们觉得pty可以运行任何协作处理进程(甚至一个协作处理进程是交互的进程)...

  • APUE读书笔记-19伪终端(16)

    (7)pty程序的do_driver函数 通过我们自己写的被pty调用的driver程序,我们可以以任何需要的方式...

  • APUE读书笔记-19伪终端(5)

    查看长时间运行的程序的输出 如果我们有一个程序,那个程序运行很长的时间,我们可以在任何一种标准的shell下面将这...

  • APUE读书笔记-19伪终端(2)

    2、概述 伪终端的意思是,这个终端对于应用程序来说表现像是一个终端,但是实际上它并不是一个真正的终端。下面的图就展...

  • APUE读书笔记-19伪终端(9)

    (3)基于Linux的伪终端 Linux提供访问伪终端的BSD方法,所以可以使用上面代码中同样的函数在Linux上...

  • APUE读书笔记-19伪终端(14)

    (4)script程序 使用pty程序,我们可以如下通过shell脚本执行script程序: 当我们运行这个she...

  • APUE读书笔记-19伪终端(17)

    远程模式 通过使用ioctl的TIOCREMOTE命令,PTY master可以设置PTY slave为远程模式。...

  • APUE读书笔记-19伪终端(8)

    (2)基于BSD的伪终端 在基于BSD的系统中,和基于Linux的系统中,我们提供了自己的XSI函数版本。 在我们...

  • APUE读书笔记-19伪终端(6)

    3、打开伪终端设备 SUS尝试统一的伪终端处理函数 我们打开伪终端设备的方式随平台有所不同。Single UNIX...

网友评论

    本文标题:APUE读书笔记-19伪终端(3)

    本文链接:https://www.haomeiwen.com/subject/imtluktx.html