libevent的入门学习-库的安装【转】

转自:https://blog.csdn.net/lookintosky/article/details/61658067

libevent的入门学习-库的安装
最近开始接触Linux应用层的东西,发现使用了libevent库,就随便学习了一下,这里权作记录

这里是一些不错的文章,感谢作者的无私奉献
libevent学习笔记 一、基础知识
libevent学习笔记(参考libevent深度剖析)
libevent学习笔记【使用篇】——(零)异步IO简介【系列译文】
Libevent 官方文档学习笔记(1. libevent_core部分)

作为学习的第一步,这里介绍如何安装libevnet函数库

一、libevent简介
Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。
Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、 Vomit、 Nylon、 Netchat等等。—[百度百科]

二、libevent的安装
libevent的库可以从官网下载,这里介绍一种偷懒的方法,一般开源库会在github有托管,这里我使用的链接地址为
https://github.com/libevent/libevent

git clone https://github.com/libevent/libevent.git
sudo apt-get install cmake
mkdir build && cd build
cmake ..

此时执行会报错,信息如下:

-- Looking for CTL_KERN - found
-- Looking for KERN_ARND - not found
-- Looking for KERN_RANDOM - found
-- Looking for RANDOM_UUID - found
CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES
OPENSSL_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.5/Modules/FindOpenSSL.cmake:370 (find_package_handle_standard_args)
CMakeLists.txt:693 (find_package)
-- Configuring incomplete, errors occurred!
See also "***/libevent/build/CMakeFiles/CMakeOutput.log".
See also "***/libevent/libevent/build/CMakeFiles/CMakeError.log".

说明缺少一些库的东西,直接安装好了,执行

sudo apt install libssl-dev
cmake ..
make
make verify[optional]
sudo make install

然后就可以在/usr/local/lib和/usr/local/include找到安装的库了

三、libevent的简单使用
这里直接使用了libevent学习笔记 一、基础知识的代码

#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
#include <event.h>
// 定时事件回调函数
void onTime(int sock, short event, void *arg)
{
printf("Hello,World!\n");

struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
// 重新添加定时事件(定时事件触发后默认自动删除)
event_add((struct event*)arg, &tv);
}

int main()
{
// 初始化
event_init();

struct event ev_time;
// 设置定时事件
evtimer_set(&ev_time, onTime, &ev_time);

struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
// 添加定时事件
event_add(&ev_time, &tv);

// 事件循环
event_dispatch();

return 0;
}

这里简要简绍一下好了
1)首先初始化 libevent 库,并保存返回的指针
struct event_base * base = event_init();
实际上这一步相当于初始化一个 Reactor 实例;在初始化 libevent 后,就可以注册事件了。
2)设置event属性和回调函数
调用函数void event_set(struct event *ev, int fd, short event, void (*cb)(int,
short, void *), void *arg);
每个参数的意义:

ev:执行要初始化的 event 对象;
fd:该 event 绑定的“句柄”,对于信号事件,它就是关注的信号;
event:在该 fd 上关注的事件类型,它可以是 EV_READ, EV_WRITE,EV_SIGNAL;
cb:这是一个函数指针,当 fd 上的事件 event 发生时,调用该函数执行处理,它有三个参数,分别是关注的fd, 关注的事件类型(读/写/信号),回调函数的参数void* arg,调用时由event_base 负责传入,按顺序,实际上就是 event_set 时的 fd, event 和 arg;
arg:传递给 cb 函数指针的参数;
注意: libevent 并不会管理 event 事件集合,这需要应用程序自行管理;
3)evtimer_set

#define evtimer_set(ev, cb, arg) event_set((ev), -1, 0, (cb), (arg))
1
定时事件不需要 fd,并且定时事件是根据添加时( event_add)的超时值设定的,因此event也 不需要设置。
4)设置 event 从属的 event_base
event_base_set(base, &ev);
这一步相当于指明 event 要注册到哪个 event_base 实例上;
5)将事件添加到事件队列里
event_add(&ev, timeout);

对上述文件进行编译,运行,基本就可以看到间隔一秒输出”hello world”了。
---------------------
作者:lookintosky
来源:CSDN
原文:https://blog.csdn.net/lookintosky/article/details/61658067
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/sky-heaven/p/10128843.html

时间: 2024-11-07 21:14:00

libevent的入门学习-库的安装【转】的相关文章

GWT入门学习之下载安装

1.准备 安装 jdk: 下载路径:http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-windows-i586.exe?AuthParam=1468542634_71b2218c9d3e010068e7d4df623f9f3b 安装教程:http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html  eclipse: 下载路径:http://ftp.jaist

nodejs学习笔记之安装、入门

由于项目需要,最近开始学习nodejs.在学习过程中,记录一些必要的操作和应该注意的点. 首先是如何安装nodejs环境?(我用的是windows 7环境,所以主要是windows 7的例子.如果想看linux下的安装可以参考http://www.cnblogs.com/meteoric_cry/archive/2013/01/04/2844481.html) 1. nodejs提供了一些安装程序,可以去官网(http://nodejs.org/download/)按照自己的机器进行下载,下载完

64位Win7下安装并配置Python3的深度学习库:Theano

注:本文全原创,作者:ZMAN  (http://www.cnblogs.com/zmanone/) 这两天在安装Python的深度学习库:Theano.尝试了好多遍,CMake.MinGW.BLAS.APLACK等等都装了试着自己编译,网上教程也搜了一大堆,但都没成功.昨晚回家清理干净电脑,又小心翼翼地装了一遍,成功,今天来公司又装了一遍,也成功,现把步骤记录如下: (注:本步骤适用于WIN7 64位操作系统,Python版本为3.4.3 64bit) 1. 请将电脑清理干净.包括之前装的Mi

OpenStack 入门学习之二:在CentOS 6.5上使用RDO单机安装icehouse

本文主要介绍如何在CentOS6.5上通过RDO来安装icehouse,由于安装的过程中涉及的软件较多,以及依赖关系比较复杂,建议使用一个全新的操作系统来进行安装. 安装步骤具体如下 (1)安装操作系统 使用光盘或镜像文件安装操作系统. 分区的时候需要划分一个逻辑区,并且建立一个名称叫cinder-volumes的组.这个逻辑卷组会被cinder使用. 创建的效果类似于: 创建过程请参考:http://www.centos.org/docs/5/html/Deployment_Guide-en-

OpenGL入门学习

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的

【PHP入门教程一】安装 WAMP 环境

本教程主要为php的面试及入门考虑,内容比较简单,高手勿喷.第一篇我们先来学习一下Wamp环境的安装,Wamp 即是windows + apache + mysql + php的缩写,本文介绍最新版本的安装.其实在windows开发环境中有套装的集成环境wamp可以直接使用,但是对于我们学习一门语言,也要学会它的环境,因此配置安装也是很重要的.对于production release,我们最重要的是学会Lamp环境,即是Linux环境下的安装.下一篇教程我们将会介绍.因为这个对于一个phper是

关于黑客,你了解多少?----黑客入门学习(常用术语+DOS操作)

关于黑客,你了解多少?----黑客入门学习(常用术语+DOS操作) ·1.1·前言 黑客一次是由英语"Hacker"英译出来的,是指专门研究.发现计算机和网络漏洞的计算机爱好者,他们伴随着计算机和网络的发展而产生成长.黑客对计算机有着狂热的兴趣和执着的追求,他们不断的研究计算机和网络知识,发现计算机和网络中存在的漏洞,喜欢挑战高难度的网络系统并从中找到漏洞,然后向管理员提出解决和修补漏洞的方法. 黑客的出现推动了计算机和网络的发展与完善.他们所做的不是恶意破坏,他们是一群纵横于网络的大

深度学习库比较

  深度学习库比较 库名 主语言 从语言 速度 灵活性 文档 适合模型 平台 上手难易 开发者 模式 Tensorflo C++ cuda/python 中等 好 中等 CNN/RNN Linux,OSX 难 Google 分布式/声明式 Caffe C++ cuda/python/Matlab 快 一般 全面 CNN 所有系统 中等 贾杨清 声明式 PyTorc python C/C++ 中等 好 中等 - -- 中等 FaceBook   MXNet c++ cuda/R/julia 快 好

[原]零基础学习视频解码之安装ffmpeg

写在文章前面:ffmpeg是一个开源的编解码框架,拥有很强大的功能.但是对于如果使用其来做开发呈现着严重两极分化,大神们讨论着高深的问题,大多数像我这样的小白连门都进不去.最近无意间领会了如何入门,现在写下这个系列文章<零基础学习视频解码>用来帮大家提供入门基础.博主的开发机器是基于Ubuntu 14.04 64位的,所以这个系列的文章都是在Ubuntu下完成的. 一.安装SDL C语言没有图形库,其中SDL比较小巧,并且是开源的,适合入门者学习.另外安装ffmpeg的时候会检测是否安装SDL