libevent源码解析 (一)安装及简单的使用

转载https://blog.csdn.net/move_now/article/details/77585464

前言

首先我阅读的版本是libevent-1.4.14b-stable版本。1.4系列虽然比较古老,但是它的源码相对简单,便于学习,并且主要的思想与2.0系列是一致的。 
附上官网链接:http://libevent.org/

安装及简单使用libevent

接下来我们直接进入正题,安装libevent-1.4。 
1. 在官网上下载对应版本的包 
2. tar -zxvf /your path/libevent-1.4.14b-stable.tar.gz解压到当前目录 
3. cd libevent-1.4.14b-stable 
4. ./configure 
5. make && make install 
6. 在/usr/local/lib目录下应该可以看见大量的动态链接库了,这时运行ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2命令(这是为了防止在系统默认路径下 找不到库文件,也可以使用gcc中的-L参数来指定库文件的位置所在) 
7. 接下来就可以使用libevent库来编写我们的代码了

#include <stdio.h>
#include <stdio.h>
//使用libevent库所需头文件  
#include <event.h>  

void on_time(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, on_time, &ev_time);  

    //1s运行一次func函数
    struct timeval tv;  
    tv.tv_sec = 1;  
    tv.tv_usec = 0;  

    //添加到事件循环中
    event_add(&ev_time, &tv);  

    //程序等待就绪事件并执行事件处理
    event_dispatch();  

    return 0;  
}  

执行命令gcc demo.c -o demo -levent编译 
运行./demo 
接下来就可以看到终端上每过1s就会打印hello world出来了。

可能会遇到的问题:

error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory当编译时出现这个错误信息证明gcc没有找到你的动态链接库。

解决方法:

可能的原因有两个: 
1. 你忘了执行上面提到的ln -s....命令,这是因为运行时动态库的搜索路径默认是/lib以及/usr/lib路径。或者可以使用gcc demo.c -o -L/your_path demo来指定动态链接库的位置。 
2. 如果还是不行, 运行命令ldconfig生效。 
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令进行更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
libevent是一个高性能的事件驱动库,用于开发网络服务器和其他异步编程任务。它提供了一个简单的接口,用于处理底层的I/O操作,如网络套接字和文件描述符。 该库主要由以下几个核心组件组成: 1. 事件循环(event loop):libevent使用事件循环来监听和处理各种事件。事件可以是来自网络、文件描述符、信号等的输入。事件循环会不断地等待事件的发生,并调用相应的回调函数来处理这些事件。 2. 事件(event):事件是指可以触发某种操作或回调函数的操作。libevent支持多种类型的事件,包括读、写、定时器以及信号等。 3. 缓冲区(buffer):libevent提供了缓冲区的支持,用于读取和写入数据。缓冲区可以是线性缓冲区,也可以是链表缓冲区。 4. I/O多路复用(I/O multiplexing):libevent使用I/O多路复用技术来同时监听多个文件描述符的状态。它支持多种I/O多路复用机制,如select、poll、epoll等。 在libevent源码中,主要有以下几个重要的文件和目录: 1. event.h/event.c:定义了事件循环、事件以及回调函数的相关结构体和函数。 2. bufferevent.h/bufferevent.c:定义了缓冲区的相关结构体和函数,用于读写数据。 3. evutil.h/evutil.c:提供了一些辅助函数,用于处理底层的网络操作、时间处理等。 4. event-internal.h:内部使用的一些结构体和函数声明。 此外,libevent还包括一些示例代码和文档,以帮助开发者了解和使用库的各种功能。 总的来说,libevent源码实现了一个高性能的事件驱动框架,通过事件循环、事件和缓冲区等组件,提供了一个简洁而灵活的编程接口,方便开发者开发高性能的网络服务器和异步编程任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值