posix_openpt 子例程

用途

打开伪终端设备。

标准 C 库 (libc.a)

语法

#include <stdlib.h<
#include <fcntl.h>

 int posix_openpt (oflag
)
int oflag;

描述

posix_openpt 子例程在伪终端的控制器设备与文件描述符之间建立连接。 文件描述符由引用该伪终端的其他 I/O 函数使用。

根据 oflag 参数的值设置打开文件描述的文件状态标志和文件访问方式。

参数

描述
oflag
奥旗 参数的值由 <fcntl.h> 文件中定义的以下列表中的标志的按位 (含) OR 构造:
0-RDWR
开放阅读和写作。
0-NOCTTY
如果设置,那么 posix_openpt 子例程不会使终端设备成为进程的控制终端。

未指定 oflag 参数的其他值的行为。

返回值

成功完成后, posix_openpt 子例程打开控制器伪终端设备并返回一个非负整数,表示编号最小的未使用文件描述符。 否则,将返回-1并设置errno全局变量来指示错误。

错误代码

在下列情况下, posix_openpt 子例程将失败:
描述
EMFILE OPEN_MAX 文件描述符当前在调用过程中打开。
ENFILE 系统中当前打开的最大允许文件数。
在下列情况下, posix_openpt 子例程可能失败:
描述
EINVAL oflag 参数的值无效。
再次 伪终端资源不足。
ENOSR STREAMS 资源不足。

示例

以下示例描述如何打开伪终端并返回工作程序设备和文件描述符的名称
#include <fcntl.h>
#include <stdio.h>

int controllerfd, workerfd;
char *workerdevice;

controllerfd = posix_openpt(O_RDWR|O_NOCTTY);

if (controllerfd == -1
   || grantpt (controllerfd) == -1
      || unlockpt (controllerfd) == -1
      || (workerdevice = ptsname (controllerfd)) == NULL)
      return -1;

printf("worker device is: %s\n", workerdevice);

workerfd = open(workerdevice, O_RDWR|O_NOCTTY);
if (workerfd < 0)
   return -1;