好像這個排版和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 每天工作都在面對...