我想使用 BSD API 创建一个伪终端。我的理解是,Unix 98 API 将自动使用 posix_openpt() 查找空闲端口,但使用 BSD API 我需要检查/查找要连接的空闲端口。这是正确的吗?
所以我需要做这样的事情......?
int fd, index = 0;
char serial_port[11]; // = "/dev/ptyp0"
while (true) {
sprintf(serial_port, "/dev/ptyp%d", index);
fd = open(serial_port, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd > 0)
break;
index++;
}
您知道使用 BSD 的伪终端教程吗?有很多使用 Unix 98 API,但使用 BSD API 的并不多。
最佳答案
使用实际设备路径是有问题的,因为路径名可能因系统而异。大多数很久以前使用伪终端的可移植应用程序都已更改为使用为抽象设备路径而编写的库函数之一。
需要考虑的 BSD 风格不止一种,例如 FreeBSD、NetBSD、OpenBSD(当然还有其他风格,包括 OSX)。 xterm 的配置脚本识别每个功能。所有的“util”库中都有openpty,在util.h中提供了它的原型(prototype)
POSIX 提供了 posix_openpt,它将 openpty 的功能与其他功能结合起来,以提供更简单的接口(interface)。然而(尽管是 documented 接口(interface)),已知它不能在 OSX 上正常工作(例如参见 OSX 10.7.5 UTF-8 encoding over ssh 以及 xterm 的 changelog )。
以下是联机帮助页链接:
关于c - 查找可用端口以使用 BSD 打开伪终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30021718/