文章目录
- 一.Libevent 概述
- 1.Libevent的特点
- 2.Libevent使用模型
- 3.Libevent 支持的事件类型
- 二.Libevent的安装
- 三.Libevent简单使用实例
一.Libevent 概述
Libevent 是开源社区的一款高性能的 I/O 框架库,使用 Libevent 的著名案例有:高性能的分布式内存对象缓存软件 memcached,Google 浏览器 Chromium 的 Linux 版本。
1.Libevent的特点
-
跨平台支持。 Libevent 支持 Linux、Unix 和 Windows。
-
统一事件源。Libevent 对 I/O 事件、信号和定时事件提供统一的处理。
-
线程安全。Libevent 使用 libevent_pthreads 库来提供线程安全支持。
-
基于 Reactor 模式的实现
2.Libevent使用模型
3.Libevent 支持的事件类型
二.Libevent的安装
Libevent 使用源码安装的方式,源码下载地址:http://libevent.org/
下载下来后,将 Libevent 的压缩包拷贝到 Linux 系统中,然后按照以下步骤执行:
1、 打开终端,并且进入到 Libevent 所在位置
2、 切换到 root 用户
3、 利用 tar 命令解压 Libevent 压缩包
4、 进入到解压开的目录中
5、 执行命令: ./configuer --prefix=/usr
6、 使用 make 命令完成编译
7、 使用 make install 命令完成安装
8、 使用 ls -al /usr/lib | grep libevent 测试安装是否成功
三.Libevent简单使用实例
编译时要加上Libevent库
gcc -o xxxxxx xxxxxxx -levent
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/time.h>
#include<signal.h>
#include<event.h>
#include<assert.h>
void sig_cb(int fd,short ev,void* arg);
void time_cb(int fd,short ev,void *arg);
int main()
{
struct event_base * base=event_init();//定义实例
assert(base!=NULL);
struct event * sig_ev=evsignal_new(base,SIGINT,sig_cb,NULL);//event_new()
event_add(sig_ev,NULL);//将事件添加到libevent
struct timeval tv={5,0};
struct event * time_ev=evtimer_new(base,time_cb,NULL);//event_new()
event_add(time_ev,&tv);
event_base_dispatch(base);//事件循环--死循环
event_free(sig_ev);
event_free(time_ev);
event_base_free(base);
exit(0);
}
void sig_cb(int fd,short ev,void* arg)
{
printf("sig=%d\n",fd);//2
}
void time_cb(int fd,short ev,void *arg)
{
printf("time out\n");
}