poll系統呼叫

2022-06-25 10:30:15 字數 857 閱讀 6881

1 #include 2

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

fds,pollfd結構型別的陣列(可變長陣列,陣列元素為結構體pollfd);結構體中含有三個成員變數(int,short,short),分別為檔案描述符fd,註冊的事件evevts(一系列事件的按位或),實際發生的事件revents;fd成員指定fd,events成員告訴poll函式監聽fd上的哪些事件(可讀,可寫,異常事件),revents成員由核心對其進行修改,通知應用程式實際發生了哪些事件;

1

struct

pollfd

2;

nfds,無符號長整型,被監聽的fd的數量;

1 typedef unsigned long

int nfds_t

timeout,設定poll函式的超時時間,單位為毫秒;

返回值,timeout為0,poll呼叫立即返回;timeout為-1,poll呼叫一直阻塞,直到某個fd就緒。

poll成功,返回就緒的fd的數量;(超時時間內沒有fd就緒,返回0)

poll失敗,返回-1,並設定errno。

poll事件的型別:

pollin-資料可讀;pollrdnorm-普通資料可讀;pollrdband-優先順序帶資料可讀;pollpri-高優先順序資料可讀;

pollout-資料可寫;pollwrnorm-普通資料可寫;pollwrband-優先順序帶資料可寫;

pollrdhup-tcp連線對方關閉或者對方關閉了寫操作;

pollerr-錯誤;pollhup-掛起;pollnval-fd沒有開啟。

poll系統呼叫

上節所述的io復用中的select函式基本機制與poll基本一致,都是採用輪詢的方式來檢視我們所關注的檔案描述符。一 下面我們首先介紹一下poll與select的區別 1.poll將描述符和事件統一到乙個結構體中 2.poll能夠同時監聽的檔案描述符比select多 3.poll事件型別比selec...

poll 系統呼叫 2

過段時間再看poll系統呼叫,還是不知說的啥。還是要概括下,寫成流水帳沒什麼用。系統呼叫 poll的功能說白了就是當前程序睡眠在fd的事件上,當事件發生後,退出睡眠,並返回發生的事件。syscall define3 poll,struct pollfd user ufds,unsigned int,...

IO復用 poll系統呼叫

poll系統呼叫和select類似,也是在指定時間內輪詢一定數量的檔案描述符,以測試其中是否有已就緒的檔案描述符,pool原型如下 includeint poll struct pollfd fds,nfds t nfds,int timeout 1.fds引數是乙個pollfd結構型別的陣列,它指...