epoll----反应堆模型

这个名听起来挺唬人,其实就是利用struct epoll_event这个数据类型里data中的void* ptr而已。由于data是一个共用体可以将我们之前使用的fd换成ptr使用,由于ptr是一个泛型指针,可以指向任意的数据类型。我们可以自己写一个结构体包含文件描述符,关心的事件类型,函数指针等,用函数指针指向一个函数,这样我们就把文件描述符和想做的操作捆绑到了一起。并且用ptr指向这个结构体,当有事件返回时,我们不需要关心它的事件是什么可以直接调用ptr指向的函数指针完成处理。

struct epoll_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 */
           };

相关代码可以去看一下libevent库中的代码。

发布了31 篇原创文章 · 获赞 4 · 访问量 942

猜你喜欢

转载自blog.csdn.net/qq_39781096/article/details/104781722