Libevent源码分析-----开篇
转载请注明出处: 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.html
do{}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_base
出处: http://blog.csdn.net/luotuo44/article/details/38443569 前面的博文都是讲一些Libevent的一些辅助结构,现在来讲一下关键结构体 ...
- Libevent源码分析-----TAILQ_QUEUE队列
出处: http://blog.csdn.net/luotuo44/article/details/38374009 Libevent源码中有一个queue.h文件,位于compat/sys目 ...
- Android 8.0系统源码分析--开篇
个人分类: Android框架总结Android源码解析android framework 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sinat ...
- Mybatis源码分析开篇
Mybatis的由来 iBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为M ...
- libevent 源码分析丨libevent组件构成以及编程要领
1,前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少.写这一系列文章的用意在于,一则分享心得:二则对libevent代码和设计思想做系统的.更深层次的分析, ...
- Libevent源码分析-----连接监听器evconnlistener
出处:http://blog.csdn.net/luotuo44/article/details/38800363 使用evconnlistener: 基于event和event_base已经可以写一 ...
- NHibernate源码分析开篇
为了让大家更好的了解NHibernate的功能和工作原理, 我们将对NHibernate的源代码进行全面的分析. 在此系列文章中, 我们做出以下约定: 为简化输入, 文中NHibernate均以NH代 ...
- libevent源码分析:eventop
eventop:定义了event_base使用的后端IO复用的一个统一接口 1 /** Structure to define the backend of a given event_base. * ...
- Libevent源码分析
http://blog.csdn.net/column/details/libevent-src.html?&page=2
- Thrift异步IO服务器源码分析
http://yanyiwu.com/work/2014/12/06/thrift-tnonblockingserver-analysis.html 最近在使用 libevent 开发项目,想起之前写 ...
最新文章
- 推荐一款基于 SpringBoot 的接口快速开发框架
- python循环语句-python中的for循环语句怎么写
- 使用 Navicat Lite 连接 Oracle 数据库
- KNN-----Python程序学习(一)
- 中国大学MOOC 人工智能导论第七章测试
- vb.net 文本框为空提示,一键清空文本框所有内容
- linux location root访问文件夹404_如何使网站支持https访问?nginx配置https证书
- python元组求和_Python 列表和元组 - 学习笔记(持续更新)
- 1096: 字符逆序
- 2022年中国隐私计算行业研究报告
- mysql日志恢复的时间格式_mysql binlog 日志恢复数据
- Oracle 11g EM安全证书问题无法访问的解决办法
- JavaScript Date时间对象
- LTE物理层一些基本概念
- matlab条件统计个数,matlab计算条件概率
- Java女生后来_那些主动的女生后来怎么样了?
- 微信小程序实现圆形菜单弹出选中动画
- Jyutping(粵拼)詳細教程
- vins-fusion代码解读[五] imu在vins里的理解
- Hyperf权限管理组件hyperf-permission发布