在C++中,select函數用于監視一組文件描述符,一旦其中有一個或多個文件描述符準備好進行讀取、寫入或發生異常,select函數就會返回。select函數的原型如下:
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
參數說明:
select函數會返回一個整數值,表示有多少個文件描述符已經準備好。下面是一個簡單的示例:
#include <iostream>
#include <sys/select.h>
int main() {
fd_set readfds;
FD_ZERO(&readfds);
FD_SET(0, &readfds); // 監視標準輸入流
struct timeval timeout;
timeout.tv_sec = 5; // 超時時間為5秒
timeout.tv_usec = 0;
int ready = select(1, &readfds, NULL, NULL, &timeout);
if (ready == -1) {
std::cout << "select error" << std::endl;
} else if (ready == 0) {
std::cout << "select timeout" << std::endl;
} else {
if (FD_ISSET(0, &readfds)) {
std::cout << "Ready to read from standard input" << std::endl;
}
}
return 0;
}
這是一個簡單的select函數使用示例,監視標準輸入流是否準備好進行讀取。在超時時間內,如果標準輸入流準備好,程序會輸出"Ready to read from standard input",如果超時則輸出"select timeout"。