我必须在不使用 forkpty() 的情况下创建一对新的 tty(主从)。
在 pts(4) 的人中,写道:
当一个进程打开 /dev/ptmx 时,它会获取一个伪终端主机 (PTM) 的文件描述符,并在 /dev/pts 目录中创建一个伪终端从机 (PTS) 设备。
使用 C 中的一个小程序,我像这样打开 /dev/ptmx :
open("/dev/ptmx", O_RDWR);
但是在 /dev/pts/ 中没有创建新的 pty。
这是关于该主题的一个很好的教程: 使用伪终端控制交互式程序,pty,pdip。如果此链接以错误 403 结尾,这是另一个:http ://rkoucha.fr/tech_corner/pty_pdip.html
特别是,查看页面中间的示例源代码,标题为“通过伪终端进行进程间通信”。这是一个自分叉的进程示例,然后两个进程通过父进程先前打开的 PTY 相互通信。
要实际创建可用的 pty 对,您还必须在 open 调用返回的 fd 上调用 grantpt(3) 和 unlockpt(3)。它没有明确定义在该进程中文件系统中实际从 pty 文件节点的创建位置——一些系统(通常 /dev/pts 是特殊文件系统的系统)将在打开时创建它,而其他系统将创建它作为 grantpt 或 unlockpt 调用的一部分。它也不能保证从站将在 /dev/pts ——它可能在其他地方——所以你需要调用 ptsname(3) 来找出它在哪里。
调用 posix_openpt(3) 而不是直接打开也可能更便携。