libev学习(二)常见类型剖析

来源:互联网 发布:手机淘宝退货退款金额 编辑:程序博客网 时间:2024/06/13 23:58

之前提到使用libev开发服务器相对较容易,用户只需要向感兴趣的事件注册回调函数。回调函数中的参数有 struct ev_loop 和 struct ev_io .

先来看看struct ev_io 这个类型

typedef struct ev_io{    EV_WATCHER_LIST (ev_io)    int fd;        /* ro */    int events;    /* ro */};

看看 EV_WATCHER_LIST 的定义

#define EV_WATCHER_LIST(type)              \  EV_WATCHER (type)                        \  struct ev_watcher_list *next;

再看看EV_WATCHER的定义

#define EV_WATCHER (type)                       \  int active;                  /* private */    \  int pending;                 /* private */    \  EV_DECL_PRIORITY             /* private */    \  EV_COMMON                    /* rw */         \  EV_CB_DECLARE (type)         /* private */    
再看看ev_watcher_list的定义
typedef struct ev_watcher_list{    EV_WATCHER_LIST (ev_watcher_list)} ev_watcher_list;

struct ev_io 结构公开的字段有 fd 和 events, 其他字段libev内部使用。

struct ev_loop 这个类型内部结构并没有对用户开放

struct ev_loop{    ev_tstamp ev_rt_now;    #define ev_rt_now ((loop)->ev_rt_now)    #define VAR(name, decl) decl;      #include "ev_vars.h"    #undef VAR};
ev_vars.h 这个文件里面都是一些 VARx 和 VAR 宏,通过宏展开用来定义一些变量和函数,比较多,暂不一一分析。


0 0
原创粉丝点击