# libevent源码深度剖析04


# libevent源码深度剖析04

### 1. 前言

详细分析源代码之前，如果能对其代码文件的基本结构有个大概的认识和分类，对于代码的分析将是大有裨益的。本节内容不多，我想并不是说它不重要！

### 2. 源代码组织结构

Libevent的源代码虽然都在一层文件夹下面，但是其代码分类还是相当清晰的，主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、对系统I/O多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于libevent的两个实用库等几个部分，有些部分可能就是一个源文件。
源代码中的test部分就不在我们关注的范畴了。
1）头文件
主要就是**event.h**：事件宏定义、接口函数声明，主要结构体event的声明；
2）内部头文件
**xxx-internal.h**：内部数据结构和函数，对外不可见，以达到信息隐藏的目的；
3）libevent框架
**event.c**：event整体框架的代码实现；
4）对系统I/O多路复用机制的封装
**epoll.c**：对epoll的封装；
**select.c**：对select的封装；
**devpoll.c**：对dev/poll的封装;
**kqueue.c**：对kqueue的封装；
5）定时事件管理
**min-heap.h**：其实就是一个以时间作为key的小根堆结构；
6）信号管理
**signal.c**：对信号事件的处理；
7）辅助功能函数
**evutil.h** 和**evutil.c**：一些辅助功能函数，包括创建socket pair和一些时间操作函数：加、减和比较等。
8）日志
**log.h**和**log.c**：log日志函数
9）缓冲区管理
**evbuffer.c**和**buffer.c**：libevent对缓冲区的封装；
10）基本数据结构
**compat/sys**下的两个源文件：queue.h是libevent基本数据结构的实现，包括链表，双向链表，队列等；_libevent_time.h：一些用于时间操作的结构体定义、函数和宏定义；
11）实用网络库
**http**和**evdns**：是基于libevent实现的http服务器和异步dns查询库；

### 3. 小结

本节介绍了libevent的组织和分类，下面将会详细介绍libevent的核心部分event结构。
