c - 查找可用端口以使用 BSD 打开伪终端

标签 c linux serial-port

我想使用 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/

相关文章:

c - 如何在循环内获取字符而不在循环中停止?

c - valgrind:mmap(0x600000, 8192) 在 UME 中失败,错误 12(无法分配内存)

c - C调试宏的奇怪语法

php - Arduino 没有收到串行消息

linux - 如何在嵌入式linux中查找哪个串口设备用于终端输出

c++ - 我如何获得 DirectFB 创建的 X Window 的 ID?

python - Linux 上的 python httplib2 问题

linux - 在 Linux Mandriva 中安装 Subversion-1.6.17 - 未创建 bin 文件夹

linux - 如何在 QT 应用程序中创建 SignalHub?

c# - 关闭 .NET SerialPort 后的 ObjectDisposedExecption