关闭后是否可以重用 PTY 的从端?

Jul*_*rra 5 linux pty

使用从端后(open(), read(), write(), close()),主端read()结束并返回 EIO 错误。但是我希望能够在不中断主 fd 的情况下open()/close()多次从属端结束。

是否可以在奴隶之后保持两端有效close()?当从端关闭时,如何保持我的“主”程序运行?我应该重新运行到整个grantpt(); unlockpt(); ptsname();序列吗?

Tho*_*key 3

短:无

长:伪终端从属连接是连接的一端,就像管道一样。两者都是通过内核在用户进程之间来回传递数据的方式。

一旦一端关闭,您就会失去连接。POSIX 中的描述ptsname是这样的:

失败时,ptsname()应返回空指针。如果 fildes 是无效的文件描述符或者文件系统中不存在从属设备名称,则可能会发生这种情况。

一旦关闭文件描述符,它就无效了。

如果您想重用连接,您可以采取一些解决方法,例如将打开的从属文件描述符传递到新创建的进程,例如,从您编写的用于管理从属文件描述符的服务器应用程序。

进一步阅读:

上面写于 2016 年。2022 年的评论提到了TIOCGPTPEER,这是一个ioctl允许应用程序获取文件描述符的代码:

(自 Linux 4.13 起)在 fd 中给定一个引用伪终端主设备的文件描述符,打开(使用给定的 open(2) 样式标志)并返回一个引用对等伪终端从设备的新文件描述符。无论从设备的路径名是否可通过调用进程的挂载命名空间访问,都可以执行此操作。

(关闭的文件描述符仍然无效)。