2011-01-11 33 views
1

你好,我想監視從libssh連接API的FD。但也想監視STDIN,並解析STDIN的命令。投票STDIN和其他FDS

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

回答

2

不在標準C++中,它沒有FD或poll()。但在unix(POSIX)上,stdin是一個有效的值爲0的FD。

2

我之前沒有使用過libssh,但功能列表的讀取告訴我它有完整的輪詢支持。 所以,你應該能夠poll()來直接監視你的ssh連接以及STDIN文件描述符。

例如輪詢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 
} 

輪詢的第一個參數是一個「struct pollfd」數組。我只指定了1(第二個參數)的長度。但是,您可以根據需要爲數組分配一個數組,使用要監視的數組中包含的libssh中的其他文件描述符。