首先说一下什么叫做 Pseudo terminal deveces(虚拟终端设备/假终端)
虚拟终端设备就是用来给远程终端用的虚拟设备。比如你用Putty或者其他什么工具连接到linux上,就会给你分配一个虚拟终端设备,比如pts/1,
pts/2, etc. 而不是必须需要一个物理终端。这样我们就可以通过虚拟终端对远程设备进行操作了。
进入正题:
int openpty(int *amaster, int *aslave, char *name, struct termios
*termp,
struct winsize *winp);
这个函数首先尝试获取一个可用的虚拟终端。如果成功获取,紧接着它就试图改变slave
device的UID为当前进程的UID,该进程的拥有者得到了对虚拟终端的读写权限。如果参数name不为空,那么openpty()将slave
pty的路径赋值给它。如果参数termp和winp不空,openpty()分别初始化termp和winp所指向的结构体。当函数返回的时候,为master和slave打开的文件描述符会分别返回给amaster和aslave。
int forkpty(int *amaster, char *name, struct
termios *termp,
struct winsize *winp);
forpty()函数首先调用openpty()函数来获得可用的虚拟终端。如果成功,它会利用fork()新建一个进程,子进程会关掉master
终端的文件描述符,然后调用
login_tty()启动slave的终端。forkpty()的参数意义与openpty()的相同。
int login_tty(int fd);
login_tty()为终端准备一个新的登录session。传给它的参数文件描述符 fd
必须是一个可读写的终端设备,然后交给调用的的进程控制。
以上这些是我看FreeBSD的manul手册翻译加理解的,如果大家觉得翻译的不好,可以自己man一下。
新浪简介
|
About Sina
|
广告服务
|
联系我们
|
招聘信息
|
网站律师
|
SINA English
|
产品答疑