5

我必须在不使用 forkpty() 的情况下创建一对新的 tty(主从)。

在 pts(4) 的人中,写道:

当一个进程打开 /dev/ptmx 时,它会获取一个伪终端主机 (PTM) 的文件描述符,并在 /dev/pts 目录中创建一个伪终端从机 (PTS) 设备。

使用 C 中的一个小程序,我像这样打开 /dev/ptmx :

open("/dev/ptmx", O_RDWR);

但是在 /dev/pts/ 中没有创建新的 pty。

4

2 回答 2

5

这是关于该主题的一个很好的教程: 使用伪终端控制交互式程序,pty,pdip。如果此链接以错误 403 结尾,这是另一个:http ://rkoucha.fr/tech_corner/pty_pdip.html

特别是,查看页面中间的示例源代码,标题为“通过伪终端进行进程间通信”。这是一个自分叉的进程示例,然后两个进程通过父进程先前打开的 PTY 相互通信。

于 2013-03-28T15:19:14.447 回答
4

要实际创建可用的 pty 对,您还必须在 open 调用返回的 fd 上调用 grantpt(3) 和 unlockpt(3)。它没有明确定义在该进程中文件系统中实际从 pty 文件节点的创建位置——一些系统(通常 /dev/pts 是特殊文件系统的系统)将在打开时创建它,而其他系统将创建它作为 grantpt 或 unlockpt 调用的一部分。它也不能保证从站将在 /dev/pts ——它可能在其他地方——所以你需要调用 ptsname(3) 来找出它在哪里。

调用 posix_openpt(3) 而不是直接打开也可能更便携。

于 2012-02-20T19:16:51.480 回答