poll函式原型
引數說明:
fds:是乙個struct pollfd結構型別的陣列,用於存放需要檢測其狀態的socket描述符;每當呼叫這個函式之後,系統不會清空這個陣列,操作起來比較方便;特別是對於socket連線比較多的情況下,在一定程度上可以提高處理的效率;這一點與select()函式不同,呼叫select()函式之後,select()函式會清空它所檢測的socket描述符集合,導致每次呼叫select()之前都必須把socket描述符重新加入到待檢測的集合中;因此,select()函式適合於只檢測乙個socket描述符的情況,而poll()函式適合於大量socket描述符的情況;
nfds:nfds_t型別的引數,用於標記陣列
fds中的
結構體元素的總數量;
timeout:是poll函式呼叫阻塞的時間,單位:毫秒;
如果timeout==0,那麼poll() 函式立即返回而不阻塞,如果timeout==inftim(巨集 表示為-1),那麼poll() 函式會一直阻塞下去,直到所檢測的socket描述符上的感興趣的事件發生是才返回
函式返回值:
poll函式的返回值與select函式的返回值一樣。
若返回0:表示超時
若為-1:錯誤
若》0:返回就緒事件的個數
#include#include#include#includeint main(int argc,char* argv)
//建立陣列,用以指定我們感興趣的檔案描述符上發生的可讀、可寫和異常等事件
// struct pollfd
// ;
struct pollfd fds[2]; //檔案描述符
fds[0].fd=0;
fds[0].events=pollin; //對讀事件感興趣
fds[0].revents=0;//輸出型
fds[1].fd=1;
fds[1].events=pollout;//對寫事件感興趣
fds[1].revents=0;
char buf[1024];
int done=0;
int i=0;
int timeout=5000;//5000毫秒,即5秒
poll函式的缺點:
(1)大量的fd的陣列被整體複製於使用者態和核心位址空間之間,而不管這樣的複製是不是有意義。
(2)與select一樣,poll返回後,需要輪詢poolfd來獲取就緒的描述符。
poll函式的優點:
(1)poll函式不要求計算最大檔案描述符的大小
(2)poll函式在應付大數目的檔案描述符的時候速度更快,相比於select
(3)它沒有最大連線數的限制,原因是它基於鍊錶來儲存的。
I O多路復用 poll
函式結構 int poll struct pollfd fds,nfds t nfds,int timeout 引數 返回值 和select一模一樣 events和revents events 關注事件 讀就緒 寫就緒 異常 輸入的時候起作用 revents 輸出結果,輸出的時候起作用 輸入輸出引數...
I O多路復用之poll
poll的優點 1 poll 不要求開發者計算最大檔案描述符加一的大小。2 poll 在應付大數目的檔案描述符的時候速度更快,相比於select。3 它沒有最大連線數的限制,原因是它是基於鍊錶來儲存的。poll的缺點 1 大量的fd的陣列被整體複製於使用者態和核心位址空間之間,而不管這樣的複製是不是...
IO多路復用之poll
poll和select區別 poll伺服器監視的檔案描述符無上限 poll將輸入 輸出引數進行分離。一 poll函式 函式格式如下所示 include int poll struct pollfd fds,unsigned int nfds,int timeout 不同與select使用三個點陣圖來...