gpt4 book ai didi

linux - epoll_event结构体(epoll)中参数的意义

转载 作者:IT王子 更新时间:2023-10-29 01:19:11 48 4
gpt4 key购买 nike

我正在使用 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”有什么用?

我检查了内核系统调用实现并发现了以下内容:
1. epoll_ctl初始化epoll_event并存储(以某种RB树格式)
2.当fd准备好后,epoll_wait返回epoll_ctl中填写的epoll_event。在此之后,我可以识别准备就绪的 fd。我不明白“u32”和“u64”的用途。

最佳答案

预定义联合是为了方便使用,您通常只使用其中之一:

  • 如果要存储指针,请使用 ptr
  • 如果要存储套接字描述符,请使用 fd
  • 如果要存储通用/不透明的 32/64 位数字,请使用 u32/u64

实际上 epoll_data 是与套接字事件关联的 64 位数据,您可以存储任何内容以查找事件处理程序,因为 epoll_wait 仅返回两件事:事件和关联的 epoll_data。

关于linux - epoll_event结构体(epoll)中参数的意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24622982/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com