![如何获取子进程内部 PTY 的文件描述符?](https://linux22.com/image/229186/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E5%AD%90%E8%BF%9B%E7%A8%8B%E5%86%85%E9%83%A8%20PTY%20%E7%9A%84%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6%EF%BC%9F.png)
https://man7.org/linux/man-pages/man7/pty.7.html
在“UNIX 98伪终端”中据说ptsname
可以使用(然后open
),但是这个函数接受文件描述符。我尝试将 0 (STDIN) 和 1 (STDOUT) 放在那里,但失败并显示“设备的 ioctl 不合适”。我从 gnome 终端运行我的程序
我不写另一个xterm
程序。只是想拥有用于异步(非阻塞)非规范低级输入和输出的文件描述符。
答案1
好吧,我试着回答自己。
- 人们必须找到一个
tty
具有isatty
功能馈送0
、标准描述符1
的真实设备2
。 - 当找到真实的 tty 时,该
ttyname
函数将给出终端设备的路径。 - 打开它
open
给出一个文件描述符
尽管声明O_RDONLY
(或O_WRONLY
,其中之一,但不是两者) 和O_NONBLOCK
标志强加了非阻塞行为,但read
我的系统 (Debian 12) 上的函数在终端设备切换到原始模式后仍然阻塞(使用tcgetattr
,cfmakeraw
和tcsetattr
函数)。
ioctl
异步读取是在+的帮助下实现的,FIONREAD
它返回待处理/可用于读取的字节(我也尝试过poll
函数,它可以工作,但对我来说似乎是一种开销)
我现在不确定如何实现/测试异步写入。