poll函式使用者態全面分析

2022-07-24 18:33:10 字數 3145 閱讀 9320

使用者層:

poll()函式通過檢驗一組檔案描述符來檢測是否有特定的時間將在上面發生並在一定的時間內等待其發生。 

poll()接受乙個指向結構"struct pollfd"列表的指標,其中包括了你想測試的檔案描述符和事件。事件由乙個在結構中事件域的位元掩碼確定。當前的結構在呼叫後將被填寫並在事件發生後返回。

當等待時間為0時,poll()函式立即返回,-1則使poll()一直掛起直到乙個指定事件發生。下面是pollfd的結構。 

struct pollfd ;

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

重要事項:無論select()還是poll()都不對普通檔案起很大效用,它們著重用於套介面(socket)、管道(pipe)、偽終端(pty)、終端裝置(tty)和其他一些字元裝置,但是這些操作都是系統相關(system-dependent)的。

這裡是乙個例子 

/* 檢測兩個檔案描述符,分別為一般資料和高優先資料。如果事件發生

則用相關描述符和優先度呼叫函式handler(),無時間限制等待,直到

錯誤發生或描述符掛起。*/

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define normal_data 1

#define hipri_data 2

int poll_two_normal(int fd1,int fd2)

if(((poll_list[0].revents&pollhup) == pollhup) ||

((poll_list[0].revents&pollerr) == pollerr) ||

((poll_list[0].revents&pollnval) == pollnval) ||

((poll_list[1].revents&pollhup) == pollhup) ||

((poll_list[1].revents&pollerr) == pollerr) ||

((poll_list[1].revents&pollnval) == pollnval))

return 0;

if((poll_list[0].revents&pollin) == pollin)

handle(poll_list[0].fd,normal_data);

if((poll_list[0].revents&pollpri) == pollpri)

handle(poll_list[0].fd,hipri_data);

if((poll_list[1].revents&pollin) == pollin)

handle(poll_list[1].fd,normal_data);

if((poll_list[1].revents&pollpri) == pollpri)

handle(poll_list[1].fd,hipri_data);}}

使用者層:

poll()函式通過檢驗一組檔案描述符來檢測是否有特定的時間將在上面發生並在一定的時間內等待其發生。 

poll()接受乙個指向結構"struct pollfd"列表的指標,其中包括了你想測試的檔案描述符和事件。事件由乙個在結構中事件域的位元掩碼確定。當前的結構在呼叫後將被填寫並在事件發生後返回。

當等待時間為0時,poll()函式立即返回,-1則使poll()一直掛起直到乙個指定事件發生。下面是pollfd的結構。 

struct pollfd ;

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

重要事項:無論select()還是poll()都不對普通檔案起很大效用,它們著重用於套介面(socket)、管道(pipe)、偽終端(pty)、終端裝置(tty)和其他一些字元裝置,但是這些操作都是系統相關(system-dependent)的。

這裡是乙個例子 

/* 檢測兩個檔案描述符,分別為一般資料和高優先資料。如果事件發生

則用相關描述符和優先度呼叫函式handler(),無時間限制等待,直到

錯誤發生或描述符掛起。*/

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define normal_data 1

#define hipri_data 2

int poll_two_normal(int fd1,int fd2)

if(((poll_list[0].revents&pollhup) == pollhup) ||

((poll_list[0].revents&pollerr) == pollerr) ||

((poll_list[0].revents&pollnval) == pollnval) ||

((poll_list[1].revents&pollhup) == pollhup) ||

((poll_list[1].revents&pollerr) == pollerr) ||

((poll_list[1].revents&pollnval) == pollnval))

return 0;

if((poll_list[0].revents&pollin) == pollin)

handle(poll_list[0].fd,normal_data);

if((poll_list[0].revents&pollpri) == pollpri)

handle(poll_list[0].fd,hipri_data);

if((poll_list[1].revents&pollin) == pollin)

handle(poll_list[1].fd,normal_data);

if((poll_list[1].revents&pollpri) == pollpri)

handle(poll_list[1].fd,hipri_data);}}

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