OPENPTY - Linux手册页
Linux程序员手册 第3部分
更新日期: 2017-09-15
名称
openpty,login_tty,forkpty-终端实用程序功能
语法
#include <pty.h> int openpty(int *amaster, int *aslave, char *name, const struct termios *termp, const struct winsize *winp); pid_t forkpty(int *amaster, char *name, const struct termios *termp, const struct winsize *winp); #include <utmp.h> int login_tty(int fd); Link with -lutil.
说明
openpty()函数查找可用的伪终端,并以amaster和aslave的形式返回主服务器和从服务器的文件描述符。如果name不为NULL,则以name返回从站的文件名。如果termp不为NULL,则从站的终端参数将设置为termp中的值。如果winp不为NULL,则从站的窗口大小将设置为winp中的值。
login_tty()函数通过创建新会话来准备在文件描述符fd所指的终端上进行登录(它可能是真实的终端设备,也可能是openpty()返回的伪终端的从属设备),使fd控制调用进程的终端,将fd设置为当前进程的标准输入,输出和错误流,并关闭fd。
forkpty()函数结合了openpty(),fork(2)和login_tty()来创建在伪终端中运行的新进程。引用伪终端主机侧的文件描述符在主机中返回。如果name不为NULL,则它所指向的缓冲区用于返回从站的文件名。 termp和winp参数(如果不为NULL)将确定伪终端从属端的终端属性和窗口大小。
返回值
如果对openpty(),login_tty()或forkpty()的调用未成功,则返回-1并将errno设置为指示错误。否则,openpty(),login_tty()和forkpty()的子进程将返回0,而forkpty()的父进程将返回子进程的进程ID。
错误说明
如果出现以下情况,openpty()将失败:
- ENOENT
- 没有可用的终端。
如果ioctl(2)无法将fd设置为调用进程的控制终端,则login_tty()失败。
如果openpty()或fork(2)失败,则forkpty()失败。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
forkpty(),openpty() | Thread safety | MT-Safe locale |
login_tty() | Thread safety | MT-Unsafe race:ttyname |
遵循规范
这些是glibc中存在的BSD函数。它们在POSIX中未标准化。
备注
const修饰符已添加到glibc 2.8中的openpty()和forkpty()的结构指针参数中。
在2.0.92之前的glibc版本中,openpty()返回BSD伪终端对的文件描述符。从glibc 2.0.92开始,它首先尝试打开UNIX 98伪终端对,如果失败则退回到打开BSD伪终端对。
BUGS
没有人知道应为名称保留多少空间。因此,使用非NULL名称调用openpty()或forkpty()可能并不安全。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。