libevent库的安装与使用
一、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函数检测不到事件的时候。
- 强制结束程序。
libevent库的安装与使用相关推荐
- Linux动态库的下载与配置(以libevent库为例)
** Linux动态库的下载与配置 ** 本章以下载.安装.配置libevent库为例(安装libevent的前提是已经成功安装openssl库) 一.libevent的下载 https://libe ...
- libevent 源码阅读 Ubuntu下muduo库的安装与使用
libevent源码分析--代码结构_鱼思故渊的专栏-CSDN博客 LINUX实战:Ubuntu下muduo库的安装与使用 LINUX实战:Ubuntu下muduo库的安装与使用-LINUX入门-维易 ...
- linux下使用NetBeans调试libevent库
1.安装libevent 参考:http://blog.csdn.net/unix21/article/details/8679269 libevent安装在usr/local/libevent下 2 ...
- libevent库介绍
libevent库 1.安装 https://gitee.com/craboy1/libraries/blob/master/libgevent/libgevent.c libevent库介绍 htt ...
- 【libevent】libevent库学习总结(一)——基础
libevent库学习总结(一)--基础 一.基础 1.1. 介绍 Libevent是一个用于开发可伸缩网络服务器的事件通知库.Libevent API提供了一种机制来执行回调函数,当某个特定事件发生 ...
- IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin安装配置[完整修正实用版]
IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin安装配置[完整修正实用版] IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin ...
- Python+Anaconda中库的安装
查看Anaconda中的Python的开发环境 (1)conda env list 不同环境中库的安装 方式一: Pycharm+Anacond安装完成后的Python文件创建以及No module ...
- python3.7如何安装库_Python3.7版库的安装以及常用方法(十分简单)
首先你的python里面必须要有pip,有的话你就可以直接在cmd窗口的python所在主目录下输入pip install "你要安装的库". 下面以 matplotlib为例. ...
- 六丶青龙的依赖库+拉库+互助安装及使用教程
六丶青龙的依赖库+互助安装及使用教程 没有服务器的先自行购买,这里推荐腾讯云2H4G8M首年70–点击购买 青龙面板安装教程 QQ交流:1014549449 --------------点击跳转 青龙 ...
最新文章
- ((void *) 0)的含义和void的一些细节
- bigdecimal比较是否相等_java基础教程之字符串的介绍,比较重要的一个知识点【四】...
- .Net使用RabbitMQ详解
- bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”);...
- pve 不订阅更新_??“吃鸡”体验服已无更新,暗夜危机2.0或将被1款新游代替
- 我的asp入门宝典与您分享
- 快速学习R语言的经验分享
- MySQL 储存过程-原理、语法、函数详细说明
- 【Spring-AOP】底层类ProxyConfig,ProxyProcessorSupport分析
- 图书馆占座系统(四)
- 联想USB键盘功能键驱动问题
- 机器学习进阶路上不可错过的 28 个视频
- php7 ob get contents,关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
- 萝卜小姐的整车第一弹—MCU 软件烧录及升级说明
- .netcore3 下Signalr 关于Joson序列化后对象属性变小写的问题
- 一生当修炼这十样品质
- FILTER的使用与过滤器实现session登录案例
- 清华大学 博士后 原来入的计算机科学与技术 现在能入软件工程吗,清华大学软件学院...
- 北大软件“软件成分分析与漏洞检测工具”(CoBOT—SCA)正式发布