日期:2014-05-16  浏览次数:20665 次

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