1. int epoll_create(int size); linux
epoll_create 新建了一個epoll的實例,請求內核分配一塊存儲事件結構的空間,size不是後臺存儲的最大尺寸,只是初始化時告訴內核應該分配多大的內部空間。 socket
epoll_create 返回了一個對新的epoll實例引用的文件描述符。這個文件描述符在全部隨後的epoll接口的調用中都會被用到。當不須要的時候,由epoll_create返回的文件描述符,須要用close()函數關閉。當全部對本文件應用的文件描述符都被關閉時,內核將把這個epoll實例破壞掉,並釋放所分配的資源以實現再利用。 函數
2 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) ui
這個系統調用控制了一個被文件描述符epfd所引用的epoll實例。它在目標文件描述符fd上請求相關的操做op。 對象
有效的op參數以下: 接口
EPOLL_CTL_ADD 在文件描述符epfd所引用的epoll實例裏註冊目標文件描述符fd並把event和fd指向的文件聯繫起來。 事件
EPOLL_CTL_MOD 資源
修改和目標文件描述符fd聯繫起來的event。 it
EPOLL_CTL_DEL io
移除由epfd引用的epoll實例中目標文件描述符fd。
event這個參數描述了鏈接fd的對象。struct epoll_event是這樣定義的:
typedef union epoll_data{
void *ptr;
int fd;
__uint32_t u32;
__uint64_t u64;
}epoll_data_t;
struct epoll_event{
__uint32_t events; /*Epoll events*/
epoll_data_t data; /*User data variable*/
}
成員變量events有一下幾種類型:
EPOLLIN:
相關的文件對read可用。
EPOLLOUT:
相關的文件對write可用。
EPOLLRDHUP(自版本linux 2.6.17)
socket流結束鏈接,或者在鏈接中途中斷。(這個標記在使用邊緣觸發模式ET時查探遠端關閉)
EPOLLPRI read操做緊急數據可用
EPOLLERR 相關聯的文件描述符出錯。epoll_wait無論有沒有在events設置它,這個事件永遠被epoll_wait關注。
EPOLLHUP 相關聯的文件描述符被掛斷。epoll_wait不會忽略這個事件,無論events中有沒有設置它。
EPOLLET 把相關聯的文件描述符設置成邊緣觸發方式。默認的是水平觸發方式。
EPOLLONESHOT (自linux 2.6.2)
把相關聯的文件描述符設置單目標