在使用从端(open()、read()、write()、close())后,主read()完成并返回EIO错误。但我希望能够在不中断主fd的情况下多次使用open()/close()从端。
在奴隶的close()之后,有可能保持两端有效吗?当从端关闭时,我如何保持我的“主”程序运行?我应该重新运行到整个grantpt(); unlockpt(); ptsname();序列吗?
发布于 2016-06-20 08:27:16
短:不
长:伪终端从连接是连接的一端,就像管道一样.这两种方式都是数据通过内核在用户进程之间来回传递的方式。
一旦一端关闭,您将失去连接。POSIX中的ptsname描述说:
如果失败,
ptsname()将返回一个空指针。如果fildes是无效的文件描述符,或者文件系统中不存在从设备名称,则可能发生这种情况。
一旦关闭了文件描述符,它就无效。
如果您想要重用一个连接,您可以做一些解决办法,例如将打开的从文件描述符传递给新创建的进程,例如从服务器应用程序中写入该应用程序来管理从文件描述符。
进一步读:
以上内容是在2016年编写的。一个2022年的评论提到了TIOCGPTPEER,它是一种允许应用程序获得新文件描述符的ioctl代码:
(因为Linux4.13)在fd中给出了引用伪终端主的文件描述符,打开(带有给定的open(2)-style标志)并返回引用对等伪终端从设备的新文件描述符。无论从设备的路径名是否可以通过调用进程的挂载命名空间访问,都可以执行此操作。
(关闭的文件描述符仍然无效)。
发布于 2022-02-20 16:26:14
对另一个答案的评论:是的,实际上。
当您创建pty对时,让您的主结束进程打开从端,并保持其打开。这样,不管有多少客户机打开和关闭从属程序,它的引用计数永远不会变为零,也不会变得无效。
https://unix.stackexchange.com/questions/290847
复制相似问题