多路复用IO---epoll

一、epoll_create函数

  函数声明:int epoll_create(int size)
  该函数生成一个epoll专用的文件描述符。它其实是在内核申请一空间,用来存放你想关注的socket fd上是否发生以及发生了什么事件。size就是你在这个epoll fd上能关注的最大socket fd数。

二、epoll_ctl函数   

    函数声明:int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
      功能:用于控制某个文件描述符上的事件,可以注册事件,修改事件,删除事件。
      epfd:由epoll_create生成的epoll专用的文件描述符;
      op:要进行的操作,EPOLL_CTL_ADD注册、EPOLL_CTL_MOD修改、EPOLL_CTL_DEL删除;
      fd:关联的文件描述符;
      event:指向epoll_event的指针;  
      成功:0;失败:-1
三、epoll_wait函数   
    函数声明:int epoll_wait(int epfd,struct epoll_event * events,int maxevents,int timeout)
    功能:该函数用于轮询I/O事件的发生;
      epfd:由epoll_create生成的epoll专用的文件描述符;
      epoll_event:用于回传代处理事件的数组;
      maxevents:每次能处理的事件数;
      timeout:等待I/O事件发生的超时值;
      成功:返回发生的事件数;失败:-1

四、struct epoll_event

  结构体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 event */
   epoll_data_t data;    /* User data variable */
}; 

  其中events表示感兴趣的事件和被触发的事件,可能的取值为:

    EPOLLET ET的epoll工作模式
    EPOLLHUP 表示对应的文件描述符被挂断
    EPOLLERR 表示对应的文件描述符发生错误
    EPOLLPRI 表示对应的文件描述符有紧急的数可读
    EPOLLOUT 表示对应的文件描述符可以写
    EPOLLIN 表示对应的文件描述符可以读

猜你喜欢

转载自www.cnblogs.com/jiangyu0331/p/12009732.html