libevent库的安装与使用
一、libevent库的安装Libevent 使用源码安装的方式,源码下载地址:http://libevent.org/下载下来后,将 Libevent 的压缩包拷贝到 Linux 系统中,然后按照以下步骤执行:打开终端,并且进入到 Libevent 所在位置利用 tar 命令解压 Libevent 压缩包进入到解压开的目录中切换到 root 模式下执行命令: ./configuer --pref
·
一、libevent库的安装
Libevent 使用源码安装的方式,源码下载地址:http://libevent.org/
下载下来后,将 Libevent 的压缩包拷贝到 Linux 系统中,然后按照以下步骤执行:
- 打开终端,并且进入到 Libevent 所在位置
- 利用 tar 命令解压 Libevent 压缩包
- 进入到解压开的目录中
- 切换到 root 模式下执行命令: ./configuer --prefix=/usr
- 使用 make 命令完成编译
- 使用 make install 命令完成安装
- 使用 ls -al /usr/lib | grep libevent 测试安装是否成功
二、libevent的简介及原理
1. 简介
Libevent 是开源社区的一款高性能的 I/O 框架库,作为一个I/O 框架库,Libevent 具有如下特点:
- 跨平台支持。 Libevent 支持 Linux、Unix 和 Windows。
- 统一事件源。Libevent 对 I/O 事件、信号和定时事件提供统一的处理。
- 线程安全。Libevent 使用 libevent_pthreads 库来提供线程安全支持。
- 基于 Reactor 模式的实现。
2. 原理
- 将要检查的描述符、读写事件、和要处理此描述符的方法交给libevent库,如果检测到此描述符上有读写事件此库就调用处理方法将其处理掉。
- 基于 Reactor 模式的I/O框架库由如下几个组件构成:
- 句柄:也就是文件描述符
- 事件多路分发器:对应的I/O函数,elect,poll,epoll等。
- 事件处理器:就是要传输到库中处理事件的方法。
- Reactor :这是核心,需要有事件循环、注册事件、删除事件等方法。
三、具体使用
1. 示例
此示例所做的事情就是将文件描述符,索要检测的事件,事件处理的方法交给libevent,如果在此文件描述符上检测到了此事件发生,就调用这个方法处理此事件。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<signal.h>
#include<event.h>
#include<sys/time.h>
void sig_fun(int fd,short ev,void*arg)
{
printf("sig=%d\n",fd);
}
void timeout_cb(int fd,short ev,void*arg)
{
printf("time out\n");
}
int main()
{
struct event_base *base=event_init();//定义一个libevent实例
assert(base!=NULL);
//struct event *sig_ev=evsignal_new(base,SIGINT,sig_fun,NULL);
struct event *sig_ev=event_new(base,SIGINT,EV_SIGNAL|EV_PERSIST,sig_fun ,NULL);
event_add(sig_ev,NULL);
struct timeval tv={3,0};
struct event *time_ev = evtimer_new(base,timeout_cb,NULL);//定义事件
event_add(time_ev,&tv);//添加事件
event_base_dispatch(base);//事件循环
event_free(sig_ev);
event_free(time_ev);
event_base_free(base);
2. 对libevent的图解
程序结束的两中情况:
- 当I/O函数检测不到事件的时候。
- 强制结束程序。
更多推荐
已为社区贡献1条内容
所有评论(0)