《UNIX环境高级编程》十九伪终端读书笔记
来源:互联网 发布:淘宝如何认证企业店铺 编辑:程序博客网 时间:2024/05/21 14:47
1、概述
伪终端是指,对于一个应用程序而言,它看上去想一个终端,但事实上它并不是一个真正的终端。
- 通常,一个进程打开伪终端主设备,然后调用fork。子进程建立一个新的会话,打开一个相应的伪终端从设备,将其文件描述符复制到标准输入、标准输出和标准错误,然后调用exec。伪终端从设备称为子进程的控制终端。
- 对于伪终端从设备上的用户进程来说,其标准输入、标准输出和标准错误都是终端设备。
- 任何写到伪终端主设备的都会作为从设备的输入,反之亦然。事实上,所有从设备端的输入都来自于伪终端主设备上的用户进程。
伪终端的典型用途:
1、网络登录服务器。
注:驱动PTY主设备的进程通常同时在读写另一个I/O流。本例中另一个I/O流是TCP/IP框。这表示该进程必然使用了某种形式的诸如select或poll这样的I/O多路转接,或者被分成两个进程或线程。
2、窗口系统终端模拟
3、srcipt程序
4、expect程序
5、运行协同程序
我们不能调用使用标准I/O库进行输入、输出的协同进程,这是因为当通过管道与协同进程进行通信时,标准I/O库会完全缓冲标准输入和标准输出,从而引起死锁。
可以将一个伪终端放到两个进程之间,诱使协同进程认为它是由终端驱动的,而非另一个进程。
现在协同进程的标准输入和标准输出就像终端设备一样,所以标准I/O库会将这两个流设置称行缓冲。
6、观看长时间运行程序的输出
2、打开伪终端设备
#include <stdlib.h>#include <fcntl.h>int posix_openpt(int olag);//若成功,返回下一个可用的PTY主设备文件描述符;若出错,返回-1
参数oflag是一个位屏蔽字,指定如何打开主设备:
O_RDWR:打开主设备进行读、写。
O_NOCTTY:防止主设备称为调用者的控制终端。
#include <stdlib.h>int grantpt(int fd);int unlockpt(int fd);//若成功,返回0;若出错,返回-1
grantpt函数更改PTY从设备的权限:把从设备节点的用户ID设置为调用者的实际用户ID,设置其组ID为一非指定值,通常是可以访问该终端设备的组。权限被设置为:对个体所有者是读/写,对组所有者是写(0620).
unlockpt函数用于准予对伪终端从设备的访问,从而允许应用程序打开该设备。
注:上面两个函数中文件描述符参数是与伪终端主设备关联的文件描述符。
如果给定了伪终端主设备的文件描述符,可以用ptsname函数找到伪终端从设备的路径名:
#include <stdlib.h>char *ptsname(int fd);//若成功,返回指向PTY从设备名的指针,若出错,返回NULL;
- 《UNIX环境高级编程》十九伪终端读书笔记
- 《UNIX环境高级编程》笔记--伪终端
- 终端IO--unix环境高级编程读书笔记
- 《UNIX环境高级编程》笔记77--伪终端
- 《UNIX环境高级编程》十八终端I/O读书笔记
- UNIX环境高级编程读书笔记
- UNIX环境高级编程读书笔记
- Unix 环境高级编程-读书笔记
- UNIX环境高级编程---读书笔记
- 读书笔记《高级UNIX环境编程》
- 《UNIX环境高级编程》笔记--控制终端
- 《UNIX环境高级编程》笔记--终端IO
- UNIX环境高级编程读书笔记(十一)—终端IO (1)
- UNIX环境高级编程读书笔记(十一)—终端IO (2)
- UNIX环境高级编程读书笔记(十一)—终端IO (1)
- UNIX环境高级编程读书笔记(十一)—终端IO (2)
- UNIX环境高级编程读书笔记(十一)—终端IO (1)
- UNIX环境高级编程读书笔记(十一)—终端IO (2)
- Java中输入流的read()为阻塞式方法的相关实例
- 读《自己动手写操作系统》(于渊著)第一节
- 在循环中删除集合的元素
- 线程的几种状态
- 11.1:派生类的使用
- 《UNIX环境高级编程》十九伪终端读书笔记
- Node.js 之 log4js 完全讲解
- Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D
- 用webpack把我们的业务模块分开打包
- Android 四大组件之 Activity-带值跳转
- Servlet工作原理解析
- 关于我博客的所有内容
- Top K Frequent Elements
- CSS颜色混合模式