EPOLL入門留念

2021-08-23 12:39:42 字數 2143 閱讀 2148

好像這個排版和typora的有點區別,還在調。。。抱歉抱歉

檔案描述符的建立

#include 

int epoll_create ( int size );

註冊監聽事件

int epoll_ctl ( int epfd, int op, int fd, struct epoll_event *event );
其中,epfd是上面建立檔案描述符的返回值,op是要指定的操作型別,fd是要監聽的檔案描述符,event是struct epoll_event型別的事件

操作型別:

​ epoll_ctl_add:往事件表中註冊fd上的事件

​ epoll_ctl_mod:修改fd上的註冊事件

​ epoll_ctl_del:刪除fd上的註冊事件

event事件的定義

struct epoll_event

;

事件主要有

​ epollin 監聽是否可以讀進來

​ epollout 監聽是否可以寫出去

​ epollet et和lt是兩種模式,預設是lt,後面講

收集

int epoll_wait ( int epfd, struct epoll_event* events, int maxevents, int timeout );

函式成功時返回就緒的檔案描述符個數,失敗時返回-1並設定errno

其中,epfd是建立的epoll的檔案描述符,events是將所有就緒的事件從核心事件表中複製到這裡,maxevents是指定監聽的事件數,timeout指等待多長時間,-1表示無限等待。

想簡單看下用法的同學可以看到這就結束了,下面將簡單介紹是什麼以及為什麼,有興趣的也可以看看最後面的例子

​ 當使用ep_create建立乙個描述符的時候linux核心會建立乙個eventpoll結構體,這裡面的內容與epoll的使用息息相關

struct eventpoll;
對於epoll中,每個事件都對應著乙個epitem結構體

struct epitem
當呼叫epoll_wait檢查是否有事件發生時,只需要檢查eventpoll物件中的rdlist雙鏈表中是否有epitem元素即可。如果rdlist不為空,則把發生的事件複製到使用者態,同時將事件數量返回給使用者。 十分的簡單。

推薦這個部落格

伺服器端

#include 

#include

#include

#include

#include

#include

#define port 666

#define sa struct sockaddr

#define listenq 1024

#define epoll_size 128

#define maxline 10240

//伺服器端

int main(int argc, char

const *argv)

else

if(events[i].events & epollin)else

if(n == 0)

else

}else

if(events[i].events & epollout)}}

return

0;}

客戶端:

此**僅僅為了測試epoll的使用,所以只寫了個簡單的

#include 

#include

#include

#include

#include

#define serv_port 666

#define sa struct sockaddr

#define maxline 1024

int main(int argc, char

const *argv)

} return

0;}

通關PAT留念

時隔一年了,上次成功考pat是去年的三月,記得是和wtq還有zzt等人一塊去的,記得同考場還有hdu大佬。今天再次參加了pat,當然是奔著頂級去的,12點半和同學xiang578一塊,騎著小黃車就去了,地點是傳媒。然後,到了,等了一會考試就開始了,尼瑪這個考場就我乙個考top的,尷尬。左邊的小兄弟考...

Blog開張,發帖留念

blog新開張,對最近在學習wtl ui程式設計的時候,對不明白的問題做一些列表,作為備忘錄 1.nm customdraw 和wm drawitem的區別?2.反射機制。其實mfc中的反射我就不太清楚,我指的是實現細節,不是原理 3.wtl中的訊息迴路,就是那些chain msp map,chai...

微軟2008 MVP Open Day留念

今年的聚會是在北京小湯山舉辦的,也許是因為少去了旅途的奔波,總覺得與去年的三亞之行差之甚遠。其實這篇文章本應該在舉辦之時寫就,但是由於換了工作之後,身心狀態還沒有調整過來,時常有累累的感覺,所以拖到現在。由於最近開始深入研究arm相關開發 開發板 開發工具 rvds and mdk 每天工作都在面對...