poll()函式詳解

2021-08-14 02:36:45 字數 1860 閱讀 5270

poll提供的功能與select類似,不過在處理流裝置時,它能夠提供額外的資訊。

#include

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

引數:1)第乙個引數:乙個結構陣列,struct pollfd結構如下:

struct pollfd;

events和revents是通過對代表各種事件的標誌進行邏輯或運算構建而成的。

events包括要監視的事件,poll用已經發生的事件填充revents。poll函式通過在revents中設定標誌肌膚pollhup、pollerr和pollnval來反映相關條件的存在。不需要在events中對於這些標誌符相關的位元位進行設定。如果fd小於0, 則events欄位被忽略,而revents被置為0.標準中沒有說明如何處理檔案結束。檔案結束可以通過revents的識別符號pollhun或返回0位元組的常規讀操作來傳達。即使pollin或pollrdnorm指出還有資料要讀,pollhup也可能會被設定。因此,應該在錯誤檢驗之前處理正常的讀操作。

poll函式的事件標誌符值 常量

說明pollin

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

pollrdnorm

普通資料可讀

pollrdband

優先順序帶資料可讀

pollpri

高優先順序資料可讀

pollout

普通資料可寫

pollwrnorm

普通資料可寫

pollwrband

優先順序帶資料可寫

pollerr

發生錯誤

pollhup

發生掛起

pollnval

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

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

2)第二個引數nfds:要監視的描述符的數目。

3)最後乙個引數timeout:是乙個用毫秒表示的時間,是指定poll在返回前沒有接收事件時應該等待的時間。如果  它的值為-1,poll就永遠都不會超時。如果整數值為32個位元,那麼最大的超時週期大約是30分鐘。

timeout值

說明inftim

永遠等待

0立即返回,不阻塞程序

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

例子程式: 

在/root/pro/fd1 /root/pro/fd2中分別有內容,

1234

5678 和

1122

3344

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define bufsize 1024

int main(int argc, char *argv)

if((pollfd = (struct pollfd*)calloc(2, sizeof(struct pollfd))) == null) //為struct pollfd分配空間

exit(1);

for(i; i<2; i++) //初始化化struct pollfd結構

poll函式詳解

select 和 poll 系統呼叫的本質一樣,poll 的機制與 select 類似,與 select 在本質上沒有多大差別,管理多個描述符也是進行輪詢,根據描述符的狀態進行處理,但是 poll 沒有最大檔案描述符數量的限制 但是數量過大後效能也是會下降 poll 和 select 同樣存在乙個缺...

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...