poll函式整理

2022-07-18 03:57:12 字數 1909 閱讀 9828

1.標頭檔案:

#include

2.原型:

int poll(struct pollfd fds, nfds_t nfds, int timeout);

3.功能:

這個函式是某些unix系統提供的用於執行與select()函式同等功能的函式

4.引數說明:

fds:是乙個struct pollfd結構型別的陣列,用於存放需要檢測其狀態的socket描述符;每當呼叫這個函式之後,系統不會清空這個陣列,操作起來比較方便;特別是對於socket連線比較多的情況下,在一定程度上可以提高處理的效率;這一點與select()函式不同,呼叫select()函式之後,select()函式會清空它所檢測的socket描述符集合,導致每次呼叫select()之前都必須把socket描述符重新加入到待檢測的集合中;因此,select()函式適合於只檢測乙個socket描述符的情況,而poll()函式適合於大量socket描述符的情況;

nfds:nfds_t型別的引數,用於標記陣列fds中的結構體元素的總數量;

timeout:是poll函式呼叫阻塞的時間,單位:毫秒;

5.返回值:

>0:陣列fds中準備好讀、寫或出錯狀態的那些socket描述符的總數量;

==0:陣列fds中沒有任何socket描述符準備好讀、寫,或出錯;此時poll超時,超時時間是timeout毫秒;換句話說,如果所檢測的socket描述符上沒有任何事件發生的話,那麼poll()函式會阻塞timeout所指定的毫秒時間長度之後返回,如果timeout==0,那麼poll() 函式立即返回而不阻塞,如果timeout==inftim,那麼poll() 函式會一直阻塞下去,直到所檢測的socket描述符上的感興趣的事件發生是才返回,如果感興趣的事件永遠不發生,那麼poll()就會永遠阻塞下去;

-1: poll函式呼叫失敗,同時會自動設定全域性變數errno;

6.詳細說明:

poll和select實現功能差不多,但poll效率高,以後要多用poll

poll()接受乙個指向結構'struct pollfd'列表的指標,其中包括了你想測試的檔案描述符和事件。事件由乙個在結構中事件域的位元掩碼確定。當前的結構在呼叫後將被填寫並在事件發生後返回。在svr4(可能更早的一些版本)中的 "poll.h"檔案中包含了用於確定事件的一些巨集定義。事件的等待時間精確到毫秒 (但令人困惑的是等待時間的型別卻是int),當等待時間為0時,poll()函式立即返回,-1則使poll()一直掛起直到乙個指定事件發生。下面是pollfd的結構。

1

struct

pollfd ;

與select()十分相似,當返回正值時,代表滿足響應事件的檔案描述符的個數,如果返回0則代表在規定時間內沒有事件發生。如發現返回為負則應該立即檢視 errno,因為這代表有錯誤發生。

如果沒有事件發生,revents會被清空,所以你不必多此一舉。

poll函式可用的測試值:

常量說明

pollin

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

pollrdnorm

普通資料可讀

pollrdband

優先順序帶資料可讀

pollpri

高優先順序資料可讀

pollout

普通資料可寫

pollwrnorm

普通資料可寫

pollwrband

優先順序帶資料可寫

pollerr

發生錯誤

pollhup

發生掛起

pollnval

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

例如fds[0].events = pollin; /*將測試條件設定成普通或優先順序帶資料可讀*/

然後 int pollresult = poll(fds,xx,xx); //這樣就可以監聽fds裡面檔案描述符了,當滿足特定條件就返回,並將結果儲存在revents中。

bzero函式 Poll 函式

使用poll函式實現i o復用.poll允許工作在任何描述符中,poll提供的功能與select函式類似。函式原型如下 include返回 若有就緒描述符則為其數目,若超時返回0,出錯返回 1 第乙個引數是指向乙個結構體陣列第乙個元素的指標。每個元素都是乙個pollfd結構,用於指定測試某個給定描述...

POLL函式描述

unix linux 2007 11 21 23 20 51 閱讀300 字型大小 大 中小訂閱 poll 函式 這個函式是某些unix系統提供的用於執行與select 函式同等功能的函式,下面是這個函式的宣告 include int poll struct pollfd fds,nfds t nf...

poll()函式詳解

poll提供的功能與select類似,不過在處理流裝置時,它能夠提供額外的資訊。include int poll struct pollfd fd,nfds t nfds,int timeout 引數 1 第乙個引數 乙個結構陣列,struct pollfd結構如下 struct pollfd ev...