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 這個範圍內的值檢視是在集合...