1.建立乙個epoll控制代碼
int
epoll_create
(int size)
;
注意:用完之後,必須呼叫close()關閉
2.註冊epoll事件
int
epoll_ctl
(int epfd,
int op,
int fd,
struct epoll_event *event)
;
epoll_ctl_add :註冊新的fd到epfd中;
epoll_ctl_mod :修改已經註冊的fd的監聽事件;
epoll_ctl_del :從epfd中刪除乙個fd;
收集在epoll監控的事件中已經傳送的事件
int
epoll_wait
(int epfd,
struct epoll_event * events,
int maxevents,
int timeout)
;
來看這樣乙個例子:
我們已經把乙個tcp socket新增到epoll描述符 這個時候socket的另一端被寫入了2kb的資料 呼叫epoll_wait,並且它會返回. 說明它已經準備好讀取操作 然後呼叫read, 只讀取了1kb的資料 繼續呼叫epoll_wait。
lt即level triggered 水平觸發,epoll預設工作模式就是lt模式。
多路I O轉接之epoll模型
epoll是linux下多路復用io介面select poll的增強版本,它能顯著提高程式在大量併發連線中只有少量活躍的情況下的系統cpu利用率,因為它會復用檔案描述符集合來傳遞結 果而不用迫使開發者每次等待事件之前都必須重新準備要被偵聽的檔案描述符集合,另一點原因就是獲取事件的時候,它無須遍歷整個...
Linux I O多路轉接epoll技術
前面的兩篇部落格我們已經為大家介紹了select和poll函式,但是在學習中我們發現select和poll存在效率上的問題。而今天的主角epoll函式真的是讓人驚豔的設計,它是在2.5.44核心中被引進的,它幾乎具備了之前所說的一切優點,被公認為linux2.6下效能最好的多路i o就緒通知方法。包...
IO多路轉接 epoll高階
例項三 基於網路c s非阻塞模型的epoll et觸發模式 epoll事件有兩種模型 et模式即edge triggered工作模式。如果我們在第1步將rfd新增到epoll描述符的時候使用了epollet標誌,那麼在第5步調用epoll wait之後將有可能會掛起,因為剩餘的資料還存在於檔案的輸入...