当前位置:   article > 正文

libevent库的安装与使用_libevent安装教程

libevent安装教程

一、libevent库的安装

Libevent 使用源码安装的方式,源码下载地址:http://libevent.org/
下载下来后,将 Libevent 的压缩包拷贝到 Linux 系统中,然后按照以下步骤执行:

  1. 打开终端,并且进入到 Libevent 所在位置
  2. 利用 tar 命令解压 Libevent 压缩包
  3. 进入到解压开的目录中
  4. 切换到 root 模式下执行命令: ./configuer --prefix=/usr
  5. 使用 make 命令完成编译
  6. 使用 make install 命令完成安装
  7. 使用 ls -al /usr/lib | grep libevent 测试安装是否成功

二、libevent的简介及原理

1. 简介

Libevent 是开源社区的一款高性能的 I/O 框架库,作为一个I/O 框架库,Libevent 具有如下特点:

  1. 跨平台支持。 Libevent 支持 Linux、Unix 和 Windows。
  2. 统一事件源。Libevent 对 I/O 事件、信号和定时事件提供统一的处理。
  3. 线程安全。Libevent 使用 libevent_pthreads 库来提供线程安全支持。
  4. 基于 Reactor 模式的实现。

2. 原理

  • 将要检查的描述符、读写事件、和要处理此描述符的方法交给libevent库,如果检测到此描述符上有读写事件此库就调用处理方法将其处理掉。
  • 基于 Reactor 模式的I/O框架库由如下几个组件构成:
    1. 句柄:也就是文件描述符
    2. 事件多路分发器:对应的I/O函数,elect,poll,epoll等。
    3. 事件处理器:就是要传输到库中处理事件的方法。
    4. 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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

2. 对libevent的图解

在这里插入图片描述
程序结束的两中情况:

  1. 当I/O函数检测不到事件的时候。
  2. 强制结束程序。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/554135
推荐阅读
相关标签
  

闽ICP备14008679号