select() 和 poll() 系統呼叫的本質一樣,poll() 的機制與 select() 類似,與 select() 在本質上沒有多大差別,管理多個描述符也是進行輪詢,根據描述符的狀態進行處理,但是 poll() 沒有最大檔案描述符數量的限制(但是數量過大後效能也是會下降)。poll() 和 select() 同樣存在乙個缺點就是,包含大量檔案描述符的陣列被整體複製於使用者態和核心的位址空間之間,而不論這些檔案描述符是否就緒,它的開銷隨著檔案描述符數量的增加而線性增大。
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
功能:監視並等待多個檔案描述符的屬性變化
引數:
fds:指向乙個結構體陣列的第0個元素的指標,每個陣列元素都是乙個struct pollfd結構,用於指定測試某個給定的fd的條件
struct pollfd;
fds結構體引數說明:fd:每乙個 pollfd 結構體指定了乙個被監視的檔案描述符,可以傳遞多個結構體,指示 poll() 監視多個檔案描述符。
events:指定監測fd的事件(輸入、輸出、錯誤),每乙個事件有多個取值,如下:
revents:revents 域是檔案描述符的操作結果事件,核心在呼叫返回時設定這個域。events 域中請求的任何事件都可能在 revents 域中返回.
注意:每個結構體的 events 域是由使用者來設定,告訴核心我們關注的是什麼,而 revents 域是返回時核心設定的,以說明對該描述符發生了什麼事件
nfds:用來指定第乙個引數陣列元素個數
timeout:指定等待的毫秒數,無論 i/o 是否準備好,poll() 都會返回.
返回值:
成功時,poll() 返回結構體中 revents 域不為 0 的檔案描述符個數;如果在超時前沒有任何事件發生,poll()返回 0;
失敗時,poll() 返回 -1,並設定 errno 為下列值之一:
poll()函式詳解
poll提供的功能與select類似,不過在處理流裝置時,它能夠提供額外的資訊。include int poll struct pollfd fd,nfds t nfds,int timeout 引數 1 第乙個引數 乙個結構陣列,struct pollfd結構如下 struct pollfd ev...
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...