epoll_ctl()的参数好似有个冗余的地方,求教
epoll_ctl()的参数似乎有个冗余的地方,求教!int epoll_ctl(int epfd, int op, int fd, struct epoll_event
epoll_ctl()的参数似乎有个冗余的地方,求教!
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *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 events */
epoll_data_t data; /* User data variable */
};
问题是:epoll()函数的第三个参数int fd和epoll_event.data.fd这两个fd必须是同一个东西吗?
什么时候必须是同一个东西,什么时候可以是不同的fd?
[解决办法]epoll_ctl的events是输入参数,你可以用一个event->data.ptr来和epoll_ctrl的第二个参数fd做绑定,在epoll_wait的时候,events是输出参数,用于返回和fd相关联的event,此时取出ptr,强转之后,就可以做你自己的消息响应了。