一、安装步骤
注意:以root用户身份操作
1、下载源码包
// wget + 安装包链接
wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
2、解压
tar zxvf libevent-2.1.12-stable.tar.gz
3、配置安装路径
cd libevent-2.1.12-stable
./configure --disable-openssl
4、编译并安装
make
make install
5、测试libevent是否安装成功:
ls -la /usr/local/include | grep event
二、libevent事件触发流程
三、libevent的使用
1、创建event_base根节点
struct event_base *event_base_new(void);
返回值就是event_base根节点地址;
释放根节点:
void event_base_free(struct event_base *);
2、初始化上树节点
/********************************************************************
* 参数:
* base:event_base的根节点
* fd:上树的文件描述符
* events:监听的事件
* cb:回调函数
* typedef void(*event_callback_fn)(evutil_socket_t fd,short events,void *arg);
* arg:传给回调函数的参数
*
* 返回值:
* 初始化好的节点的地址
*********************************************************************/
struct event *event new(struct event base *base, evutil_socket t fd , short events, event callback fn cb, void *arg);
3、节点上树
/****************************************
* 参数:
* ev:上树节点的地址
* timeout:NULL 永久监听;固定时间 限时等待
*****************************************/
int event_add(struct event * ev,const struct timeval* timeout);
节点下树:
/****************************************
* 参数:
* ev:下树节点的地址
*****************************************/
int event_del(struct event *ev);
释放节点:
void event_free(struct event *ev);
4、循环监听
int event_base_dispatch(struct event_base *event_base);
相当于while(1){epool_wait}循环监听;
退出循环监听:
int event_base_loopexit(struct event_base *base,const struct timeval *tv);//等待固定时间之后退出
int event_base_loopbreak(struct event_base *base);//立即退出