第一期 Libevent 源码文件结构分析 《Libevent 原理与实践》

原创 2018年04月15日 07:49:57

下载 Libevent 源码,切换到 2.1.8 稳定版本,步骤如下:

git clone https://github.com/libevent/libevent.git
cd libevent
git checkout release-2.1.8-stable

在分析源码先要先对源码进行配置,因为 libevent/include/event2/event-config.h 文件只有在配置后才会根据当前系统环境生成,所以需要一直执行到 make 成功才行,在 .libs 目录下会生成 libevent***.so 的库文件,当然 make install 可以省略掉,因为我们只是用来分析,并不想干扰本地系统,下面是配置步骤:

apt-get install build-essential automake autoconf libtool m4
cd libevent
./autogen.sh
./configure
make

如果对源码进行了修改后想恢复可以使用下面的步骤:

shopt -s extglob
rm -rf !(.git) .*
git reset --hard

使用 Eclipse 查看 Libevent 源码的步骤:

  • File -> New -> Makefile Project with Existing Code
  • 选择 Libevent 所在目录,导入代码
  • Toolchain for indexer setting -> none
  • 工程属性 -> paths and Symbols -> Includes -> GNU C -> 添加下图所示目录,注意顺序很重要,也可以通过 配置文件 导入。
    这里写图片描述
    配置好 indexer 的路径后就可以很方便的查看 Libevent 的源码了:
    这里写图片描述

导出头文件列表备注说明:

# tree libevent/include/event2
├── buffer_compat.h
├── bufferevent_compat.h
├── bufferevent.h
├── bufferevent_ssl.h
├── bufferevent_struct.h
├── buffer.h
├── dns_compat.h
├── dns.h
├── dns_struct.h
├── event_compat.h
├── event-config.h
├── event.h
├── event_struct.h
├── http_compat.h
├── http.h
├── http_struct.h
├── keyvalq_struct.h
├── listener.h
├── rpc_compat.h
├── rpc.h
├── rpc_struct.h
├── tag_compat.h
├── tag.h
├── thread.h
├── util.h
└── visibility.h

导出库文件列表备注说明:

# tree libevent/.libs -P "libevent*so*"
├── libevent-2.1.so.6.0.2           // 为了兼容老版本应用,包含core和extra的所有内容
├── libevent_core-2.1.so.6.0.2      // libevent 核心模块
├── libevent_extra-2.1.so.6.0.2     // libevent内部实现的 HTTP,DNS,RPC模块的库文件
├── libevent_openssl-2.1.so.6.0.2   // libevent_core的支持openssl版本
└── libevent_pthreads-2.1.so.6.0.2  // libevent_core的支持pthread版本

libevent 源码中每个文件的备注说明列表:

libevent  dirs: 7 files:88

# tree -L 1 -d
── dir
├── cmake/
├── compat/
├── include/
├── m4/
├── sample/
├── test/
└── WIN32-Code/

# tree -L 1 -P "*.h" --dirsfirst
── *.h files:23
├── bufferevent-internal.h
├── changelist-internal.h
├── defer-internal.h
├── epolltable-internal.h
├── evbuffer-internal.h
├── event-internal.h
├── evmap-internal.h
├── evrpc-internal.h
├── evsignal-internal.h
├── evthread-internal.h
├── ht-internal.h
├── http-internal.h
├── iocp-internal.h
├── ipv6-internal.h
├── kqueue-internal.h
├── log-internal.h
├── minheap-internal.h        // 最小堆数据结构的实现
├── mm-internal.h
├── openssl-compat.h
├── ratelim-internal.h
├── strlcpy-internal.h
├── time-internal.h
└── util-internal.h

# tree -L 1 -P "*.c" --dirsfirst
── *.c files:35
├── arc4random.c
├── buffer.c
├── bufferevent_async.c
├── bufferevent.c
├── bufferevent_filter.c
├── bufferevent_openssl.c
├── bufferevent_pair.c
├── bufferevent_ratelim.c
├── bufferevent_sock.c
├── buffer_iocp.c
├── devpoll.c
├── epoll.c
├── epoll_sub.c
├── evdns.c
├── event.c
├── event_iocp.c
├── event_tagging.c
├── evmap.c
├── evport.c
├── evrpc.c
├── evthread.c
├── evthread_pthread.c
├── evthread_win32.c
├── evutil.c
├── evutil_rand.c
├── evutil_time.c
├── http.c
├── kqueue.c
├── listener.c
├── log.c
├── poll.c
├── select.c
├── signal.c
├── strlcpy.c
└── win32select.c

# tree -L 1 -I "*.h|*.c" --dirsfirst
── misc files: 30
├── appveyor.yml        // AppVeyor 持续集成工具配置文件
├── autogen.sh          // Autotools 运行脚本
├── ChangeLog
├── ChangeLog-1.4
├── ChangeLog-2.0
├── checkpatch.sh
├── CMakeLists.txt      // Cmake 配置文件,用于 Cmake 编译
├── configure.ac        // Autoconf 配置文件,用于生成 configure 文件
├── CONTRIBUTING.md
├── Doxyfile            // Doxygen 代码文档配置文件
├── evconfig-private.h.cmake
├── evconfig-private.h.in
├── evdns.3
├── event.3
├── event-config.h.cmake
├── event_rpcgen.py
├── libevent_core.pc.in
├── libevent_extra.pc.in
├── libevent_openssl.pc.in
├── libevent.pc.in
├── libevent_pthreads.pc.in
├── LICENSE                     //开源协议信息
├── make_epoll_table.py
├── make-event-config.sed
├── Makefile.am                 // Automake 配置文件,用于生成 Makefile
├── Makefile.nmake              // nmake 配置文件,用于 windows 平台编译
├── README.md
├── Vagrantfile         // Vagrant 集成安装工具配置文件
├── whatsnew-2.0.txt
└── whatsnew-2.1.txt

参考文档

  1. GNU/Autotools 使用流程分析
  2. Fast portable non-blocking network programming with Libevent
  3. The C10K problem
  4. libevent源码深度剖析 sparkliang 2009
  5. Libevent学习笔记(2)-基本数据结构 xGuru 2010
  6. Libevent分析笔记(3)-I/O复用(Multiplexing)机制的确定 xGuru 2010
  7. libevent源码分析 YY哥 2010
  8. libevent2.0 源码学习 small_qch 2014
  9. Libevent源码分析 luotuo44 2014
  10. Libevent源码分析 Allen Xu 2015
  11. libevent源码分析 冷冰若水 2016
  12. libevent高性能网络库源码分析 Wallace 2016
  13. libevent 深入浅出 刘丹冰 2017
版权声明:本文为aggresss原创文章,未经博主允许不得转载。 作者:aggresss@gmail.com https://blog.csdn.net/aggresss/article/details/79946343

Libevent源码分析-----Libevent工作流程探究

之前的博文讲了很多Libevent的基础构件,现在以一个实际例子来初步探究Libevent的基本工作流程。由于还有很多Libevent的细节并没有讲所以,这里的探究还是比较简洁,例子也相当简单。...
  • luotuo44
  • luotuo44
  • 2014-08-11 22:32:19
  • 7112

libevent源码深度剖析pdf

  • 2010年01月16日 21:36
  • 571KB
  • 下载

libevent高性能网络库源码分析——事件处理框架(四)

event_base结构 event_base的初始化 接口函数libevent中基于Reactor模式的事件处理框架对应event_base,在event在完成创建后,需要向event_base注册...
  • wzgang123
  • wzgang123
  • 2016-04-19 22:03:46
  • 4245

libevent源码分析(7)--2.1.8--信号事件处理机制分析

一、信号绑定机制      简单来说,就是将外部信号转换为内部IO事件来处理。      由于信号捕捉函数是全局绑定的,所以没办法像IO事件一样,将IO事件和文件描述符绑定在一起,而libevent...
  • beitiandijun
  • beitiandijun
  • 2017-05-31 18:55:20
  • 751

Windows平台的包含源代码的libevent(可编译)

  • 2013年01月08日 14:28
  • 234KB
  • 下载

基于libevent 2.1.18固件制作的vs2017最简洁工程

  • 2017年11月28日 15:02
  • 15.76MB
  • 下载

libevent高性能网络库源码分析——事件(event)及其接口(三)

libevent的结构 event结构 event相关接口 事件
  • wzgang123
  • wzgang123
  • 2016-04-19 16:14:16
  • 486

libevent源码分析(1)--2.1.8--标志信息

一、事件类型标志 event-internal.h /** * @name event flags * * Flags to pass to event_new(), event_ass...
  • beitiandijun
  • beitiandijun
  • 2017-05-26 19:15:58
  • 705

Libevent-2.1.8源码分析——event_base(二)

上一节中,我们学习了如何创建一个默认的event_base。但是在实际的应用中,默认的event_base是远远满足不了需求的。更多的时候我们是需要根据具体的使用情况,来建立一个复杂的event_ba...
  • huangjh2017
  • huangjh2017
  • 2017-09-20 21:47:36
  • 330

Libevent源码分析-----bufferevent工作流程探究

和之前的《Libevent工作流程探究》一样,这里也是用一个例子来探究bufferevent的工作流程。具体的例子可以参考《Libevent客户端例子》,这里就不列出了。其实要做的例子也就是buffe...
  • luotuo44
  • luotuo44
  • 2014-09-17 17:06:41
  • 9830
收藏助手
不良信息举报
您举报文章:第一期 Libevent 源码文件结构分析 《Libevent 原理与实践》
举报原因:
原因补充:

(最多只允许输入30个字)