• 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! ");

    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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    BRAFT EDITOR富文本编辑器
    小程序
    单元测试之道读书笔记(二)
    单元测试之道读书笔记(一)
    Blend学习网址
    2014年要读的10本书
    程序员一生必读的书籍
    WPF中PasswordBox控件无法绑定Password属性解决办法
    异步方式向WPF ListBox控件中一条一条添加记录
    10中适合编程的字体
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/10128843.html
Copyright © 2020-2023  润新知