且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

想弄清楚LIBEVENT和EPOLL之类的关系,不要因为走得太急而迷失了方向

更新时间:2021-11-25 12:04:38

要一步一步构架起整个体系,

来日方长。

系统调用级别的EPOLL和函数库LIBEVENT之间,大体关系应该是如何呢?

网上有说法:

~~~~~~~~~~~~~~

libevent对底层多路复用机制的封装通过两个数据结构eventop和evbase,都在event_base结构体中使用。

epollops(eventop类型的变量)封装了epoll的事件处理系统调用,evbase(epollop)封装了epoll相关的变量。
 
struct evepoll {
struct event *evread;
struct event *evwrite;
};

 

struct epollop {
struct evepoll *fds; // fds指向evepoll数组,数组索引就是fd大小,数组元素就是读写event
int nfds; // fd的个数
struct epoll_event *events;
int nevents;
int epfd;
};

 

const struct eventop epollops = {
"epoll",
epoll_init,
epoll_add,
epoll_del,
epoll_dispatch,
epoll_dealloc,
1 /* need reinit */
};