poll提供的功能與select函式類似,不過在處理流裝置時,它能夠提供額外的資訊 。
#include
int poll(struct pollfd *fdarray,unsigned long nfds,int timeout);
返回:若有就緒的描述符則為其數目,若超時則為0,若出錯則為-1;
第乙個引數是指向乙個結構第乙個元素的指標。每個陣列元素都是乙個pollfd結構,用於指定測試某個給定的描述符fd的條件。
struct pollfd ;
要測試的條件由events成員指定,函式在相應的revents成員中返回該描述符的狀態。在下表中給出一些常值:
我們將該圖分為三個部分:第乙個部分是處理輸入的四個常值,第二個部分是處理輸出的三個常值,第三個部分是處理錯誤的三個常值。其中,第三部分的三個常值不能在events中設定,但是當相應條件存在時就在revents中返回。
timeout引數指定poll函式返回前等待多長時間。它是乙個指定應等待毫秒數的正值。
inftim常值定義為乙個負值,其定義在標頭檔案#include,不過很多系統把它定義在標頭檔案#include中。
當發生錯誤時,poll函式的返回值為-1,若定時器到時之前沒有任何描述符就緒,則返回0,否則返回就緒描述符的個數,即revents成員值非0的描述符個數。
下面給出乙個用poll實現的例子,其功能和之前的部落格對於select函式實現的功能一樣,客戶端給伺服器傳送訊息,伺服器將訊息回射到客戶端。。。
伺服器:
#include"../util.h"
int sock_bind(const char *ip,short port)
void handle_connection(struct pollfd *clientfds,int maxi)
printf("recv msg:>%s\n",buf);
//將接收到的資料又進行傳送
send(clientfds[i].fd,buf,n,0);}}
}void do_poll(int sockfd)
//當伺服器的返回事件為可讀
if(clientfds[0].revents & pollin)
printf("accept a new client :%s:%d\n",inet_ntoa(addrcli.sin_addr),addrcli.sin_port);
for(i = 1 ; i < open_size; ++i)
}if(i == open_size)
//將客戶端的測試條件設定為可讀
clientfds[i].events = pollin;
if(i > maxi)
maxi = i;
if(--nready <= 0)
continue;
}handle_connection(clientfds,maxi);
}}int main(int argc,char*argv)
客戶端:
#include"../util.h"
void handle_connection(int sockfd)
//將buf的內容顯示在螢幕上
write(stdin_fileno,buf,n);
}//當標準輸入輸出可讀時
if(fds[1].revents & pollin)
}}int main(int argc,char*argv)
公用標頭檔案:
#pragma once
#include#include#include#include#include#include#include#include#define ipaddr "127.0.0.1"
#define port 8787
#define maxline 1024
#define listenq 5
#define size 10
#define open_size 5
程式的執行結果和利用select函式的執行結果是一樣的。。。 IO復用 poll函式
東陽的學習筆記 poll提供的功能和 select 類似,不過在處理流裝置時,它能提供額外的資訊。include intpoll struct pollfd fdarray,unsigned long nfds,int timeout 第乙個引數時指向乙個結構陣列第乙個元素的指標。每個陣列元素都是乙...
I O 復用之 poll 函式
poll 函式提供的功能與 select 類似,不過在處理流裝置時,它能提供額外的資訊。include int poll struct pollfd fdarray,unsigned long nfds,int timeout 返回值 若有就緒描述符則為其數目,若超時則為 0,若出錯則為 1 str...
IO復用之poll函式介紹
函式原型 include intpoll struct pollfd fds,nfds t nfds,int timeout 函式功能 等待乙個檔案描述符轉變為就緒狀態 引數1 第乙個引數是指向乙個結構陣列第乙個元素的指標。每個陣列元素都是乙個pollfd結構,用於指定測試某個給定描述符fd的條件。...