epol学习笔记,深入学习epoll


epol学习笔记

epoll的相关系统调用

epoll_create()

epoll_ctl()

epoll_wait()

int epoll_create(int size);

创建一个epoll的句柄。

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

epoll的事件注册函数。

  1. 第一个参数是epoll_create()的返回值。

  2. 第二个参数表示动作,用三个宏来表示:

    EPOLL_CTL_ADD:注册新的fd到epfd中;

    EPOLL_CTL_MOD:修改已经注册的fd的监听事件;

    EPOLL_CTL_DEL:从epfd中删除一个fd。

  3. 第三个参数是需要监听的fd。

  4. 第四个参数是告诉内核需要监听什么事。

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可以是以下几个宏的集合:

int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);

收集在epoll监控的事件中已经发生的事件。

Edge Triggered 工作模式

@ 基于非阻塞文件句柄

@ 只有当read()或者write()返回EAGAIN时才需要挂起,等待。

但这并不是说每次read()时都需要循环读,直到读到产生一个EAGAIN才认为此次事件处理完成,当read()返回的读到的数据长度小于请求的数据长度时,就可以确定此时缓冲中已没有数据了,也就可以认为此事读事件已处理完成。

相关内容

    暂无相关文章