epoll_create函式
int epoll_create(int size);
建立乙個epoll的控制代碼,size指定需要監聽描述符的最大數量。該函式返回乙個fd,在使用完epoll之後需要呼叫close()關閉,否則可能導致fd耗盡。
epoll_ctl函式
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
epoll事件註冊函式,引數解釋:
epfd:通過epoll_create函式獲得的epoll控制代碼。
op:操作的型別,有三種操作用三個巨集表示: 巨集
說明epoll_ctl_add
註冊新fd進入epfd中
epoll_ctl_mod
修改已經註冊的fd的監聽事件
epoll_ctl_del
從epfd中刪除乙個fd
fd:要監聽的檔案描述符
event:需要監聽的事件,struct epoll_event結構如下:
typeof union epoll_data epoll_data_t;
struct epoll_event
events可以以下幾個巨集的集合:巨集事件
epollin
檔案描述符可讀
epollout
檔案描述符可寫
epollpri
檔案描述符有緊急資料可讀
epollerr
檔案描述符發生錯誤
epollhup
檔案描述符被結束通話
epollet
將epoll設為邊緣觸發
epolloneshot
只監聽一次事件,之後再需監聽,需要再次註冊
epoll_wait函式
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
epoll_wait函式等待監視的事件發生,引數解釋:
epfd:通過epoll_create函式建立的epoll控制代碼。
events:乙個陣列,核心監視到發生的事件集合。
maxevents:events中元素數量最大值,不能超過epoll_create時的size。
timeout:超時時間。單位為毫秒:0立即返回,-1永久阻塞。
epoll_wait函式返回值為需要處理事件的數目,如返回值為0則表示已超時。
epoll兩種工作模式
lt:水平觸發
et:邊緣觸發
簡單地說,水平觸發會一直觸發,這一點和select和poll相同,而邊緣觸發只會觸發一次,這是epoll特有的。
若採用了et模式,需要一直read/write直到出錯為止。
使用et模式可以便捷地處理epollout事件,省去了開啟與關閉epollout的epoll_ctl函式呼叫。
epoll使用模板
int listen_sock=startup(8080);
struct sockaddr_in remote;
socklen_t len=sizeof(struct sockaddr_in);
int epfd=epoll_create(1024);
struct epoll_event events[1024],ev;
ev.data.fd=listen_sock;
ev.events=epollin;
epoll_ctl(epfd,epoll_ctl_add,listen_sock,&ev);
for(;;)
else if(events[i].events&epollin)
ev.data.fd=client_sock;
ev.events=epollout;
epoll_ctl(epfd,epoll_ctl_mod,client_sock,&ev);
}else if(events[i].events&epollout)
ev.data.fd=client_sock;
ev.events=epollin;
epoll_ctl(epfd,epoll_ctl_mod,client_sock,&ev);}}
}close(listen_sock);
close(epfd);
IO多路復用之select poll以及epoll
處理執行態的程序 獲得cpu資源 由於需要等待一些事件的傳送而不能繼續執行時,就會祖東的轉為阻塞狀態,這是,他是不占用cpu資源的。因此也只有處於執行態的程序,才能夠轉為阻塞狀態。這時候排程器會切換到其他程序,一旦這個程序等待的事件發生了,那麼就會重新喚醒這個程序,重新等待被排程。一旦被排程器排程,...
Linux系統IO多路復用之select
include includeint select int maxfd,fd set readset,fd set writeset,fd set exceptset,const struct timeval timeout 引數介紹 maxfd 最大描述符數量 1 readset 指定核心測試讀的...
I O多路復用之poll
poll的優點 1 poll 不要求開發者計算最大檔案描述符加一的大小。2 poll 在應付大數目的檔案描述符的時候速度更快,相比於select。3 它沒有最大連線數的限制,原因是它是基於鍊錶來儲存的。poll的缺點 1 大量的fd的陣列被整體複製於使用者態和核心位址空間之間,而不管這樣的複製是不是...