读书人

epoll_ctl()的参数好似有个冗余的地方

发布时间: 2013-07-08 14:13:00 作者: rapoo

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,强转之后,就可以做你自己的消息响应了。

读书人网 >UNIXLINUX

热点推荐