伪终端是一个虚拟设备,它提供了一个IPC通道。通道的一端是一个期望连接到终端设备的程序,通道的另一端也是一个程序,这个程序通过IPC通道来发送其输入并读取输出以此来驱动面向终端的程序
伪终端提供了网络连接到面向终端程序之间那缺失的一环。伪终端是一对互联的虚拟设备:主伪终端和从伪终端,有时会被称为伪终端对。伪终端对提供了一条IPC通道,两个进程能分别打开主端和从端,并通过伪终端双向传输数据。
关于伪终端,关键点在于从设备表现得就像一个标准终端一样。所有可以施加于终端设备的操作同样也可以施加于伪终端从设备上
典型的情况下,两个程序利用伪终端的逻辑如下:面向终端程序的标准输入、输出以及错误都连接到伪终端设备上,它也是程序的控制终端。在终端的另一侧,驱动程序作为用户的代理,提供面向终端程序的输入,并读取程序的输出
相关api如下:
-
#define _XOPEN_SOURCE 600
-
#include <stdlib.h>
-
#include <fcntl.h>
-
int posix_openpt(int flags);
-
/*returns file descriptor on success, or -1 on error*/
修改从设备属主和权限:
-
#define _XOPEN_SOURCE 500
-
#include <stdlib.h>
-
int grantpt(int mfd);
-
/*returns 0 on success, or -1 on error*/
修改由文件描述符mfd所代表的的伪终端主设备相关联的从设备的属主和权限
解锁从设备:
-
#define _XOPEN_SOURCE 500
-
#include <stdlib.h>
-
-
int unlockpt(int mfd);
-
/*returns 0 on success, or -1 on error*/
该函数移除从设备的内部锁,该从设备同文件描述符mfd所代表的的伪终端主设备相关联。这个锁的机制的目的是允许调用进程在其他进程能够打开这个伪终端设备之前执行必要的初始化工作。在调用unlockpt()之前尝试打开伪终端从设备将导致失败,一旦通过unlockpt()解锁了从设备,就可以用传统的系统调用open()来打开它
阅读(7157) | 评论(0) | 转发(0) |