libevent 文件结构

前言

在分析libevent之前, 先对整个libevent的文件结构有一个基本的了解才行, 有了整体的了解才能清楚每个功能的位置.

文件结构

  1. 事件的头文件

    • event.h : 事件类型的宏定义, 接口函数的声明, 以及最重要的event, event_base以及evbueffer, bufferevent结构体, 其中evbuffer结构的功能在函数evbuffer.c中实现
  2. 事件的框架

    • event.c : 对event整个结构的实现. 这也是libevent的核心, 融合整个libevent框架.
  3. 对IO多路复用的封装

    • epoll.c : 对epoll的封装. (我们主要分析epoll封装的实现, 其他的有兴趣的可考虑看一下)
    • select.c : 对select的封装
    • poll.c : 对poll的封装
    • kqueue.c : 对kqueue的封装
  4. 定时器的事件管理

    • min-heap.h : 以时间作为键值的的小根堆结构.
    • evutil.c : 对时间的其他实现.
  5. 信号的事件管理

    • evsignal.h : 定义了evsignal_intfo结构体, 主要用于信号接口的声明, 管理.
    • evsignal.c : 定义了信号的各种接口, 信号的功能 : 信号初始化, 信号注册, 信号加入就绪队列, 信号删除,注销等.
  6. 缓冲区管理. libevent自己内部设置了 一个缓冲区管理机制, 运行后都是自动化管理的

    • event.h : 定义了evbuffer, bufferevnt结构体.
    • bufferevent : 对缓冲区实现, 读写事件的处理
    • evbuffer.c : 对实现缓冲区的自动化管理, 加入自动加入就绪队列,删除等.
  7. 日志

    • log.hlog.c : 实现日志的管理
  8. 基础数据结构

    • compat/sys/queue.h : 链表的数据结构的实现(有兴趣可以看一下, 都是宏定义, 看起来有点绕)
  9. 测试代码

    • testsample目录中 : 检测libevent的安装
  10. 辅助功能函数

    • evutil.h 和evutil.c:一些辅助功能函数, 包括创建socket pair和一些时间操作函数 : 加、减和比较等
  11. 实用网络库

    • http和evdns : 是基于libevent实现的http服务器和异步dns查询库

流程

当然上面说的功能有很多, 但是我们不可能全部进行分析, 毕竟太多了. 本专题还是挑选了其中重要的部分 : 事件的头文件, 事件的框架 , epoll的封装, 定时器的事件管理, 信号的事件管理, 缓冲区管理.

你可能感兴趣的:(libevent)