TKeed tk_epoll_create函數詳解

tk_epoll_create函數在epoll.h頭文件中聲明,在epoll.c中定義

struct epoll_event* events;

int tk_epoll_create(int flags) {
	int epoll_fd = epoll_create1(flags);
	if (epoll_fd == -1)
		return -1;
	events = (struct epoll_event*)malloc(sizeof(struct epoll_event) * MAXEVENTS);
	return epoll_fd;
}

先說說epoll的功能,epoll把用戶關心的文件描述符上的事件放在內核裏的一個事件表中,從而無需像select和poll那樣每次調用都要重複傳入文件描述符集或事件集。但epoll需要使用一個額外的文件描述符,來唯一標識內核中的這個事件表。這個文件描述符使用epoll_create(或者epoll_create1)函數來創建。
因此,事件集和epoll描述符是一對一的,事件集中有多個事件
首先全局定義了事件,之後主函數傳參flags=0給tk_epoll_create函數,tk_epoll_create函數調用epoll_create1(flags),該函數返回值與參數說明如下:
int epoll_create1(int flags);
功能:創建一個多路複用的實例
參數:
flags:
0:如果這個參數是0,這個函數等價於poll_create(0)
EPOLL_CLOEXEC:這是這個參數唯一的有效值,如果這個參數設置爲這個。那麼當進程替換映像的時候會關閉這個文件描述符,這樣新的映像中就無法對這個文件描述符操作,適用於多進程編程+映像替換的環境裏
返回值:
success:返回一個非0 的未使用過的最小的文件描述符
error:-1 errno被設置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章