zoukankan      html  css  js  c++  java
  • 多路复用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 表示对应的文件描述符可以读

  • 相关阅读:
    高级排序
    递归
    Linked List
    中缀、后缀、前缀表达式
    队列(queue)
    栈(Stack)
    数组(Array)
    数据结构和算法
    常见排序
    开启
  • 原文地址:https://www.cnblogs.com/jiangyu0331/p/12009732.html
Copyright © 2011-2022 走看看