# 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结构。