I O多路復用之poll

2022-08-05 17:54:11 字數 1113 閱讀 2441

poll函式和select函式非常相似,但是函式介面不一樣。

#include

int poll(struct pollfd *fdarray, unsigned long nfds, int timeout);

返回:就緒描述字的個數,0-超時,-1-出錯

第乙個引數是指向乙個結構陣列第乙個元素的指標。每個陣列元素都是乙個pollfd結構,用於指定測試某個給定描述字fd的條件。

struct pollfd{

int fd;              //descriptor to check

short events;    //events of interest on fd

short revents;   //events that occurred on fd

要測試的條件由events成員指定,而返回的結果則在revents中儲存。常用條件及含意說明如下:

poll函式可用的測試值

常量

說明

pollin

普通或優先順序帶資料可讀

pollrdnorm

普通資料可讀

pollrdband

優先順序帶資料可讀

pollpri

高優先順序資料可讀

pollout

普通資料可寫

pollwrnorm

普通資料可寫

pollwrband

優先順序帶資料可寫

pollerr

發生錯誤

pollhup

發生掛起

pollnval

描述字不是乙個開啟的檔案

注意:後三個只能作為描述字的返回結果儲存在revents中,而不能作為測試條件用於events中。

第二個引數nfds是用來指定陣列fdarray的長度。

最後乙個引數timeout是指定poll函式返回前等待多長時間。它的取值如下:

timeout值

說明

inftim

永遠等待

0立即返回,不阻塞程序

>0等待指定數目的毫秒數

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使用三個點陣圖來...

I O多路復用之poll

回憶一下 select介面 intselect int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout select需要我們指定檔案描述符的最大值,然後取 0,nfds 這個範圍內的值檢視是在集合...