IO復用 poll函式

2021-07-13 04:39:09 字數 2439 閱讀 1131

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的條件。...