我使用的是epoll_ctl()和epoll_wait()系统调用。
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
struct epoll_event {
uint32_t events; /* epoll events (bit mask) */
epoll_data_t data; /* User data */
};
typedef union epoll_data {
enter code here`void *ptr; /* Pointer to user-defined data */
int fd; /* File descriptor */
uint32_t u32; /* 32-bit integer */
uint64_t u64; /* 64-bit integer */
} epoll_data_t;在使用epoll_ctl时,我可以使用联合epoll_data来指定fd。一种方法是在"fd“成员中指定它。另一种方法是在我自己的结构中指定它,"ptr“成员将指向该结构。
"u32“和"u64”有什么用?
我仔细检查了内核系统调用的实现,发现了以下内容:
发布于 2014-07-16 16:35:21
预定义的联合是为了方便使用,您通常只使用其中的一个:
实际上,epoll_data是与套接字事件关联的64位数据,用于存储查找事件处理程序的任何内容,因为epoll_wait只返回两件事:事件和关联的epoll_data。
发布于 2014-07-08 16:50:50
epoll_data的字段没有任何预定义的含义;您的应用程序会分配一个含义。
任何字段都可用于存储应用程序识别事件所需的信息。(对于像数组索引这样的东西,u32或u64可能很有用。)
https://stackoverflow.com/questions/24622982
复制相似问题