伪终端
引言
在终端和运行程序间有一个终端行规程,
通过该规程我们能设置终端的特殊字符【如退格,行删除,中断等】
当一个登录请求到达网络连接时,终端行规程并不是自动被加载到网络连接和登录shell之间的。
概述
伪终端这个术语指的是,对一个应用而言,它看上去像一个终端,但事实上不是一个真正的终端。
- 通常,一个进程打开伪终端主设备,调fork。子进程建立新的会话。打开一个相应的伪终端从设备,将其文件描述符复制到标准输入,标准输出,标准错误。然后调exec。伪终端从设备成为子进程的控制终端。
- 对伪终端从设备上的用户进程,其标准输入,标准输出,标准错误都是终端设备。
- 任何写到伪终端主设备的都会作为从设备的输入。反之亦然。
所有从设备端的输入都来自伪终端主设备上的用户进程。
从设备上的终端行规程使我们拥有普通管道没有的其他处理能力。。
伪终端的用途:
1. 网络登录服务器
2. 窗口系统终端模拟
3. script程序
4. expect程序
5. 运行协同进程
6. 观看长时间运行程序的输出
打开伪终端设备
在打开PTY设备文件时,
应用程序并不需要设置O_TTY_INIT标识。
各种平台打开伪终端设备的方法有所不同。
#include
#include
int posix_openpt(int oflag);
#include
int grantpt(int fd);
int unlockpt(int fd);
#include
char* ptsname(int fd);
grantpt可能需fork并exec一个设置用户ID程序。
unlockpt用于准予对伪终端从设备的访问。从而允许应用打开该设备。
#include "apue.h"
int ptym_open(char* pts_name, int pts_namesz);
int ptys_open(char* pts_name);
函数pty_fork
#include "apue.h"
#include
pid_t pty_fork(
int *ptrfdm,
char *slave_name,
int slave_namesz,
const struct termios *slave_termios,
const struct winsize *slave_winsize);
Returns: 0 in child, process ID of child in parent, −1 on error