轮询STDIN和其他Fds

时间:2011-01-11 10:03:52

标签: c++ unix

您好我想监视来自libssh connection apis的FD。但也希望监视STDIN,并解析来自STDIN的命令。

我可以在C ++中使用poll进行此操作。

2 个答案:

答案 0 :(得分:2)

不在标准C ++中,没有FD或poll()。但是在unix(POSIX)上,stdin是值为0的有效FD。

答案 1 :(得分:2)

我没有在使用libssh之前读取功能列表告诉我它有完整的民意调查支持。 因此,您应该能够poll()直接监视您的ssh连接以及STDIN文件描述符。

e.g。轮询stdin以输入类似

的内容
int timeout = 100; // wait 100ms
struct pollfd fd;
fd.fd = STDIN;
fd.events = POLLIN;
fd.revents = 0;
int ret = poll(&fd, 1, timeout);
if (ret > 0 && (fd.revents & POLLIN != 0))  {
  // got some data
} else {
  // check for error
}

poll的第一个参数是一个“struct pollfd”数组。我只指定了长度为1(第二个参数)。但是,您可以根据需要使用libssh中包含的其他文件描述符为您要监视的数组分配一个数组。