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