【libevent】源码学习(一)--开篇
来源:互联网 发布:炫浪网络社区发书区 编辑:程序博客网 时间:2024/05/27 09:48
摘自: http://blog.csdn.net/luotuo44/article/details/38300779
我所分析的Libevent版本是2.0.21版本,是目前最新的稳定版本。看这系列博文中,需要读者有Linux编程的一些基础。因为像POSIX、文件描述符、多线程等等这些概念,我并不会去解释,我默认读者已经熟悉这些概念了。如果读者读过《UNIX环境高级编程》,那就完全没问题了。
因为Libevent是跨平台的,所以它使用了很多它自己定义的通用跨平台类型,比如evutil_socket_t。此外,Libevent也定义了一些跨平台通用的API,这些都可以在《通用类型和函数》一文中找到。
相信来看本系列的文章的读者,都不会是刚刚接触Libevent的用户。这里就不说Libevent的优点和怎么安装使用Libevent了。我是想介绍其他东西。
Source Insight:
这个工具是阅读代码的神器。下面是一个截图。
正中央是代码窗口。在代码中,如果你想看一下event_assign函数的内部是怎么实现的,那么你不用找到event_assign函数实现文件,然后打开,再Ctrl + F查找。在Source Insight中,你只需用鼠标单击一下event_assign函数。那么就会在下面的那个窗口显示event_assign函数的具体实现。是不是很厉害的功能?
右边的窗口是文件列表,和其他IDE的功能差不多。
左边那个窗口功能也是很强大的,特殊是当代码中出现了很多条件宏。在这样的条件下,这个宏会被定义成这样。在那样的条件下,又会定义成那样。左边的窗口可以清楚地看到。
Doxgen工具:
这是一个可以制作chm文件的工具。
在Source Insight中,虽然是很容易追踪到某个函数的具体实现(实现都在c文件中,非头文件)。但Libevent的源文件中很少有注释,也没有这个函数的解释。而且Source Insight无法追踪到函数的声明,只能追踪到定义(就是函数的实现)(或许是我对Source Insight还不熟悉,如果有这样的功能,还望大家指出)。
而由Doxgen工具生成的chm文件是离线把的帮助文档,它会列出函数的说明、参数和返回值。
怎么用Doxgen工具制作Libevent的离线版帮助文档,可以参考http://blog.chinaunix.net/uid-12773189-id-3022656.htmldo{}while(0)宏:
在Libevent的源代码中,经常能看到do{}while(0)宏的使用。如果是第一次碰到这种写法,估计都会比较不解。可以参考http://www.cnblogs.com/lanxuezaipiao/p/3535674.html来解惑。
函数调用关系图:
有时候追踪一个函数,想知道该函数的调用关系图。有一个网站提供了这个关系图。下面举两个例子。
图中,上面的是event_free函数会调用哪些函数,一颗主调用树。下面的是哪些函数会调用event_free函数,是被调用关系。其中test_event_pending这些是Libevent提供的测试例子的测试函数。下面再给另外一个被调用关系的图:
有一个不足之处,这个网站并没有和Libevent同步更新,目前提供的最高Libevent版本是2.0.3-alpha
- 【libevent】源码学习(一)--开篇
- libevent源码学习(一)event事件
- Libevent源码分析-----开篇
- Libevent源码分析-----开篇
- Libevent源码分析-----开篇
- Libevent源码分析-----开篇
- Libevent源码分析-----开篇
- libevent源码学习研究(libevent-0.1)
- 学习使用libevent(一)
- libevent源码解读(一)--总体阅读
- libevent源码解读(一)-- __attribute__认识
- libevent源码笔记(一) Reactor框架
- Libevent源码分析(一)--- 基本数据结构
- Python学习(一)------开篇
- libevent开篇
- 【libevent】libevent库学习总结(一)——基础
- libevent库源码学习-kqueue( freebsd)
- libevent库源码学习-epoll( linux)
- 对话 | 华为朱平:AI技术让手机满足千人千面需求
- 讯飞1024计划公布 砸下10.24亿豪赌人工智能【附现场PPT】
- ubuntu开机启动碰到need at least a destination address问题
- 添加CGAL库进EKClothSynthesis工程
- Scrapy 入门项目
- 【libevent】源码学习(一)--开篇
- 关于maven出现Missing artifact oracle:ojdbc14:jar:10.2.0.4.0错误的问题解决办法
- C语言八皇后冲突问题
- SQL--动态列名
- 第七周 项目2
- 2017年10月24日 一些小感想
- tar命令详解及使用实例
- Ubuntu 16.04下解决sublime text3无法输中文问题
- 寄存器PLC地址与寄存器modbus协议地址