Socket程式設計之epoll的學習筆記

2021-09-11 10:50:43 字數 1588 閱讀 5894

1.核心事件表

epoll是linux特有的i/o復用函式,首先,epoll使用一組函式來完成任務,而不是單個函式.其次,epoll把使用者關心的檔案描述符上的事件放在核心裡的乙個事件表中,epoll需要使用乙個額外的檔案描述符,來唯一標識核心的這個事件表.

#includeint epoll_create(int size)
size只是告訴核心,事件表需要多大.該函式返回的檔案描述符將用作其他所有的epoll系統呼叫的第乙個函式,指定要返回的檔案描述符

#include int epoll_ctl(int epfd,int op, int fd, struct epoll_event * event)
fd引數是要操作的檔案描述符,op引數是指定操作型別,操作型別有下面幾種:

epoll_ctl_add,往事件表中註冊fd上的事件

epoll_ctl_mod,修改fd上的註冊事件

epoll_ctl_del,刪除fd上的註冊事件

event引數指定事件,它是epoll_event結構指標型別,epoll_event的定義如下

struct epoll_event

其中events成員描述事件型別.epoll支援的事件型別和poll基本相同.表示epoll事件型別的巨集在poll對應的巨集前加"e"

, data成員用於儲存使用者資料,epoll_data_t的定義如下:

typedef union epoll_data

epoll_data是乙個聯合體,其中4個成員中使用最多的fd,它指定事件所屬的目標檔案描述符,ptr成員可用來指定與fd相關的使用者資料,epoll_data_t是乙個聯合題,不能同時使用ptr和fd成員,將檔案描述符和使用者資料關聯起來,以實現快速的資料訪問

2.epoll_wait函式

epoll系列系統呼叫的主要介面是epoll_wait函式,它在一端超時時間裡等待一組檔案描述符上的事情

#includeint epoll_wait(int epfd,struct epoll_event* events,int maxevents,int timeout)
該函式成功返回就緒的檔案描述符的各數

timeout引數的含義與poll介面的timeout引數相同.maxevents引數指定最多監聽多少個時間,它必須大於0。

epoll_wait函式如果檢測到時間,就將所有就緒的事件從核心事件表中複製到它的第二個引數events指向的陣列中.

這個陣列值用於輸出epoll_wait檢測到的就緒事件,而不是像select和poll的陣列引數用於傳入使用者註冊的事件,用於輸出核心檢測的就緒事件,極大的提高了應用程式索引就緒檔案描述符的效率

poll和epoll在使用的差別

int ret = poll(fd,max_event_number,-1);

//必須遍歷完所有已經註冊檔案描述符並找到其中的就緒這

for(int i=0;ilt和et模式

epoll對於檔案描述符的操作有兩種模式,lt模式和et模式

4.epolloneshot事件

linux網路程式設計之 epoll

include include include include include include include include include include using namespace std define maxline 5 define open max 100 define listen...

網路程式設計之Socket程式設計

對 tcp ip udp socket 程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission co...

網路程式設計之socket程式設計

大多數專案是在linux下開發伺服器端,而在windows下開發客戶端,需要經常在兩大平台之間進行切換,單獨學習一種平台沒有實踐意義。值得欣慰的是,兩大平台下的 socket 程式設計非常相似,並不會增加多少學習成本。網路程式設計就是編寫程式使兩台聯網的計算機相互交換資料。這就是socket的全部內...