1 #include 2int poll(struct pollfd* fds,nfds_t nfds,int timeout);
fds,pollfd結構型別的陣列(可變長陣列,陣列元素為結構體pollfd);結構體中含有三個成員變數(int,short,short),分別為檔案描述符fd,註冊的事件evevts(一系列事件的按位或),實際發生的事件revents;fd成員指定fd,events成員告訴poll函式監聽fd上的哪些事件(可讀,可寫,異常事件),revents成員由核心對其進行修改,通知應用程式實際發生了哪些事件;
1struct
pollfd
2;
nfds,無符號長整型,被監聽的fd的數量;
1 typedef unsigned longint 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結構型別的陣列,它指...