epoll的核心是下面的函式
epoll_ctl:用於將待監聽的埠和放入(或移除)監聽物件中。這個函式兩個關鍵的輸入為,1、待監聽的介面,2、該介面在io事件發生後,作業系統介面返回給使用者對應這個介面的資料。
將埠加入監聽的
struct epoll_event epv = };
int op;
void *data = malloc(10);
epv.data.ptr = data;
epv.events = epollin|epollet;
op = epoll_ctl_add;
if(epoll_ctl(epollfd, op, watchfd, &epv) < 0)
printf("event add failed[fd=%d]\n", ev->fd);
else
printf("event add ok[fd=%d]\n", ev->fd);
epollfd是epoll的檔案id,op是要進行的操作(此例中為add操作),watchfd是被監聽的埠,epv是和watchfd對應的資訊,其中包括和watchfd進行關聯的指標(data)和監聽的事件(epollin|epollet),在watchfd的檔案描述符的事件觸發後出返回和其對應的epv內容。
epoll_wait:用於進行監聽的
等待事件發生的**
#define max_events 10
int fds ;
struct epoll_event events[max_events];
void *data
fds = epoll_wait(epollfd, events, max_events, -1);
for (int i = 0; i < fds; i++)
data = events[i].data.ptr;
//後續根據data獲得埠,並進行訊息處理
epoll_wait在events陣列中返回的是使用者使用epoll_ctl在繫結埠時的epoll_event的內容,epoll_wait最多可以返回使用者指定的「max_events」個有事件發生的io檔案描述符
epoll_create:用於建立epoll的函式
epoll技術,及其常用操作
epoll技術的介紹 void addepoll int kdpfd,uint32 t events,void ptr mutex.unlock 備註1 ev的型別為struct epoll event ev kdpfd是epoll的控制代碼。可以man epoll ctl來檢視各個引數及資料結構....
epoll監聽檔案 epoll的使用
epoll i o event notification facility 在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。相比於select,epoll最大的好處在於它不會隨著監聽fd數目的增長而降低效率。因為...
Linux 2 6 核心Epoll用法舉例說明
epoll用到的所有函式都是在標頭檔案sys epoll.h中宣告的,下面簡要說明所用到的資料結構和函式 所用到的資料結構 typedef union epoll data epoll data t struct epoll event 結構體epoll event 被用於註冊所感興趣的事件和回傳所...