您找不到此原因的原因是,没有专门允许它的文档化接口。但是,有一个技巧可以使您做到这一点。在打开伪终端主机(假定为文件描述符ptm
)之后,打开并立即关闭从机端:
close(open(ptsname(ptm), O_RDWR | O_NOCTTY));
这将在tty主机上设置HUP标志。现在,您可以定期轮询HUP标志poll()
(例如,每当数据来自数据源时):
struct pollfd pfd = { .fd = ptm, .events = POLLHUP };
poll(&pfd, 1, 10 /* or other small timeout */);
if (!(pfd.revents & POLLHUP))
{
/* There is Now a reader on the slave side */
}
如果阅读器消失了,POLLHUP
将再次设置。
在您的情况下,您甚至可能甚至不需要记住从一个循环到下一个循环,给定的pty是否具有读取器- 只需阻塞read()
数据源,然后在数据可用时,同时同步poll()
所有主tty并发送数据发送到任何未POLLHUP
设置的位置。