如何获取子进程内部 PTY 的文件描述符?

如何获取子进程内部 PTY 的文件描述符?

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,cfmakerawtcsetattr函数)。

ioctl异步读取是在+的帮助下实现的,FIONREAD它返回待处理/可用于读取的字节(我也尝试过poll函数,它可以工作,但对我来说似乎是一种开销)

我现在不确定如何实现/测试异步写入。

相关内容