epoll_event结构体


定义

epoll_event结构体一般用在epoll机制中,其定义如下:

struct epoll_event {
    uint32_t events; /* Epoll events */
    epoll_data_t data; /* User data variable */
} __attribute.squareup(__packed__);
typedef union epoll_data {
    void* ptr;
    int fd;
    uint32_t u32;
    uint64_t u64;
} epoll_data_t;

epoll_event结构体中的字段解释如下:

  • events:表示epoll事件类型,包括可读、可写等。
  • data:表示用户数据,可以是一个指针或文件描述符等。

events字段

events字段可以是以下值之一:

  • EPOLLIN:表示对应的文件描述符上有数据可读。
  • EPOLLOUT:表示对应的文件描述符上可以写入数据。
  • EPOLLRDHUP:表示对端已经关闭连接,或者关闭了写操作端的写入。
  • EPOLLPRI:表示有紧急数据可读。
  • EPOLLERR:表示发生错误。
  • EPOLLHUP:表示文件描述符被挂起。
  • EPOLLET:表示将epoll设置为边缘触发模式。
  • EPOLLONESHOT:表示将事件设置为一次性事件。
enum EPOLL_EVENTS
  {
    EPOLLIN = 0x001,
#define EPOLLIN EPOLLIN
    EPOLLPRI = 0x002,
#define EPOLLPRI EPOLLPRI
    EPOLLOUT = 0x004,
#define EPOLLOUT EPOLLOUT
    EPOLLRDNORM = 0x040,
#define EPOLLRDNORM EPOLLRDNORM
    EPOLLRDBAND = 0x080,
#define EPOLLRDBAND EPOLLRDBAND
    EPOLLWRNORM = 0x100,
#define EPOLLWRNORM EPOLLWRNORM
    EPOLLWRBAND = 0x200,
#define EPOLLWRBAND EPOLLWRBAND
    EPOLLMSG = 0x400,
#define EPOLLMSG EPOLLMSG
    EPOLLERR = 0x008,
#define EPOLLERR EPOLLERR
    EPOLLHUP = 0x010,
#define EPOLLHUP EPOLLHUP
    EPOLLRDHUP = 0x2000,
#define EPOLLRDHUP EPOLLRDHUP
    EPOLLEXCLUSIVE = 1u << 28,
#define EPOLLEXCLUSIVE EPOLLEXCLUSIVE
    EPOLLWAKEUP = 1u << 29,
#define EPOLLWAKEUP EPOLLWAKEUP
    EPOLLONESHOT = 1u << 30,
#define EPOLLONESHOT EPOLLONESHOT
    EPOLLET = 1u << 31
#define EPOLLET EPOLLET
  };


data字段

data字段的类型是一个union,可以存放一个指针或文件描述符等数据。用户可以将自己需要的数据存放到这个字段中,当事件触发时,epoll系统调用会返回这个数据,以便用户处理事件。

typedef union epoll_data {
    void* ptr;
    int fd;
    uint32_t u32;
    uint64_t u64;
} epoll_data_t;
posted @ 2024-01-29 18:39  guanyubo  阅读(228)  评论(0编辑  收藏  举报