错误说明

如果出现以下情况,openpty()将失败:

ENOENT
没有可用的终端。

如果ioctl(2)无法将fd设置为调用进程的控制终端,则login_tty()失败。

如果openpty()或fork(2)失败,则forkpty()失败。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
forkpty(),openpty()Thread safetyMT-Safe locale
login_tty()Thread safetyMT-Unsafe race:ttyname

备注

const修饰符已添加到glibc 2.8中的openpty()和forkpty()的结构指针参数中。

在2.0.92之前的glibc版本中,openpty()返回BSD伪终端对的文件描述符。从glibc 2.0.92开始,它首先尝试打开UNIX 98伪终端对,如果失败则退回到打开BSD伪终端对。

另外参见

fork(2),ttyname(3),pty(7)

OPENPTY - Linux手册页

Linux程序员手册 第3部分
更新日期: 2017-09-15

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

说明

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-终端实用程序功能

遵循规范

这些是glibc中存在的BSD函数。它们在POSIX中未标准化。

返回值

如果对openpty(),login_tty()或forkpty()的调用未成功,则返回-1并将errno设置为指示错误。否则,openpty(),login_tty()和forkpty()的子进程将返回0,而forkpty()的父进程将返回子进程的进程ID。

语法

#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.

BUGS

没有人知道应为名称保留多少空间。因此,使用非NULL名称调用openpty()或forkpty()可能并不安全。

日期:2019-08-20 18:00:58 来源:oir作者:oir