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

之前提到使用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 宏,通过宏展开用来定义一些变量和函数,比较多,暂不一一分析。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值