自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

luotuo44的专栏

千里之行始于足下

  • 博客(18)
  • 资源 (118)
  • 收藏
  • 关注

原创 Libevent源码分析-----连接监听器evconnlistener

基于event和event_base已经可以写一个CS模型了。但是对于服务器端来说,仍然需要用户自行调用socket、bind、listen、accept等步骤。这个过程有点繁琐,为此在2.0.2-alpha版本的Libevent推出了一些对应的封装函数。用户只需初始化struct sockaddr_in结构体变量,然后把它作为参数传给函数evconnlistener_new_bind即可。该

2014-08-24 22:16:04 11718 2

原创 Libevent源码分析-----通用类型和函数

Libevent定义了一系列的可移植的兼容类型和函数。这使得在各个系统上都有一致的效果,Libevent一般都会在兼容通用类型和函数的前面加上ev或evutil前缀。       在实现上,Libevent都是使用条件编译+宏定义的方式。使用这种方式,同一个宏名字,可以使得在不同的系统上, 编译时得到不同的值。这种方式在跨平台编程中,经常使用到。此外,对于Libevent的兼容类型,如果所在系

2014-08-23 18:16:45 7560 1

原创 Libevent源码分析-----与event相关的一些函数和操作

Libevent提供了一些与event相关的操作函数。本文就重点讲一下这方面的源代码。 在Libevent中,无论是event还是event_base,都是使用指针而不会使用变量。实际上,如果查看Libevent不同的版本,就可以发现event和event_base这两个结构体的成员是不同的。对比libevent-2.0.21-stable和libevent-1.4.13-stable这两

2014-08-21 22:49:28 5441

原创 Libevent源码分析-----管理超时event

前面的博文已经说到,如果要对多个超时event同时进行监听,就要对这些超时event进行集中管理,能够方便地(时间复杂度小)获取、加入、删除一个event。在之前的Libevent版本,Libevent使用小根堆管理这些超时event。小根堆的插入和删除时间复杂度都是O(logN)。在2.0.4-alpha版本时,Libevent引入了一个叫common-timeout的东西来管理超时even

2014-08-19 11:05:54 6282 3

原创 Libevent源码分析-----Libevent时间管理

Libevent采用的时间类型是struct  timeval,这个类型在很多平台都提供了。此外,Libevent还提供了一系列的时间操作函数。比如两个struct timeval相加、相减、比较大小。有些平台直接提供了一些时间操作函数,但有些则没有,那么Libevent就自己实现。这些宏如下:

2014-08-18 15:57:50 8570 2

原创 Libevent源码分析-----超时event的处理

Libevent允许创建一个超时event,使用evtimer_new宏。

2014-08-17 11:32:51 9735 2

原创 Libevent源码分析-----evthread_notify_base通知主线程

一般来说,是主线程执行event_base_dispatch函数。本文也是如此,如无特别说明,event_base_dispatch函数是由主线程执行的。本文要说明的问题是,当主线程在执行event_base_dispatch进入多路IO复用函数时,会处于休眠状态,休眠前解锁。此时,其他线程可能想往event_base添加一个event,这个event可能是一般的IO event也可能是超时e

2014-08-14 21:02:44 10397 12

原创 Libevent源码分析-----信号event的处理

前面讲解了Libevent怎么对一个IO事件进行监听,现在来讲一下Libevent怎么监听信号。Libevent对于信号的处理是采用统一事件源的方式。简单地说,就是把信号也转换成IO事件,集成到Libevent中。

2014-08-13 16:55:42 8984 8

原创 Libevent源码分析-----event优先级设置

event_base允许用户对它里面的event设置优先级,这样可以使得有些更重要的event能够得到优先处理。可以通过event_base_priority_init函数设置event_base的优先级个数,该函数实现如下://event.c文件 intevent_base_priority_init(struct event_base *base, int npriorities){

2014-08-12 11:24:48 5147 1

原创 Libevent源码分析-----Libevent工作流程探究

之前的博文讲了很多Libevent的基础构件,现在以一个实际例子来初步探究Libevent的基本工作流程。由于还有很多Libevent的细节并没有讲所以,这里的探究还是比较简洁,例子也相当简单。

2014-08-11 22:32:19 13185 11

原创 Libevent源码分析-----跨平台Reactor接口的实现

之前的博文讲了怎么实现线程、锁、内存分配、日志等功能的跨平台。Libevent最重要的跨平台功能还是实现了多路IO接口的跨平台(即Reactor模式)。这使得用户可以在不同的平台使用统一的接口。Libevent会根据所在的系统选择一个合适的多路IO复用函数。这篇博文就是来讲解Libevent是怎么实现这一点的。        Libevent在实现线程、内存分配、日志时,都是使用了函数指针和全

2014-08-09 17:40:38 7358 5

原创 Libevent源码分析-----配置event_base

前面的博文都是讲一些Libevent的一些辅助结构,现在来讲一下关键结构event_base。         这里作一个提醒,在阅读Libevent源码时,会经常看到backend这个单词。其直译是“后端”。实际上其指的是Libevent内部使用的多路IO复用函数。本系列博文中,我不会使用到“后端”这个词,而采用“多路IO复用函数”。多路IO复用函数就是select、poll、epoll

2014-08-08 20:15:16 10140 3

原创 Libevent源码分析-----event_signal_map

因为event_signal_map结构体实在太简单了,所以不像event_io_map那样,有一个专门的文件。由于没有专门的文件,那么只能从蛛丝马迹上探索这个event_signal_map结构了。通过一些搜索,可以得到与event_signal_map相关联的一些结构体有下面这些:

2014-08-07 19:58:43 4849 5

原创 Libevent源码分析-----event_io_map哈希表

上一篇博客说到了TAILQ_QUEUE队列,它可以把多个event结构体连在一起。是一种归类方式。本文也将讲解一种将event归类、连在一起的结构:哈希结构。哈希结构由下面几个结构体一起配合工作:

2014-08-06 16:47:53 7041 5

原创 Libevent源码分析-----TAILQ_QUEUE队列

Libevent源码中有一个queue.h文件,位于compat/sys目录下。该文件里面定义了5个数据结构,其中TAILQ_QUEUE是使得最广泛的。本文就说一下这个数据结构。TAILQ_QUEUE由下面两个结构体一起配合工作。

2014-08-04 19:47:42 11385 15

原创 Libevent源码分析-----多线程、锁、条件变量(二)

Libevent还支持对锁操作的一些检测,进而捕抓一些典型的锁错误。Libevent检查:1. 解锁自己(线程)没有持有的锁 2. 在未解锁前,自己(线程)再次锁定一个非递归锁。 Libevent通过一些变量记录锁的使用情况,当检查到这些锁的错误使用时,就调用abort,退出运行。用户只需在调用evthread_use_pthreads或者evthread_use_window

2014-08-03 20:21:38 7010 2

原创 Libevent源码分析-----多线程、锁、条件变量(一)

Libevent提供给用户的可见多线程API都在thread.h文件中。在这个文件提供的API并不多。基本上都是一些定制函数,像前面几篇博文说到的,为Libevent定制用户自己的多线程函数。对于Windows系统和其他遵循pthreads标准的系统来说,可以分别调用evthread_use_windows_threads和evthread_use_pthreads这两个无参函数直接定制。其他的系

2014-08-02 20:07:46 14701

原创 Libevent源码分析-----内存分配

Libevent的内存分配函数还是比较简单的,并没有定义内存池之类的东西。如同前一篇博客那样,给予Libevent库的使用者充分的设置权,即可以设置用户(Libevent库的使用者)自己的内存分配函数。至于怎么分配,主动权在于用户。但在设置的时候要注意一些地方,下面会说到。

2014-08-01 13:31:15 8360 2

拉格朗日插值公式的完全展开

拉格朗日插值公式的完全展开。可以方便地编程实现

2014-12-01

glibc-2.19

glibc-2.19。包含C语言标准库源代码

2014-09-10

RTEMS 例子

RTEMS 例子源代码,可以直接编译使用

2014-07-22

gcc-4.8.1(卷四)

gcc-4.8.1(卷四).gcc编译器源代码,卷四

2014-07-22

gcc-4.8.1(卷一)

gcc-4.8.1(卷一).gcc编译器源代码,卷一

2014-07-22

binutils-2.20.1-rtems4.10.diff

安装RTEMS交叉编译器时需要用到的补丁

2014-07-22

gcc-4.8.1(卷三)

gcc-4.8.1(卷3).gcc编译器源代码。卷3

2014-07-19

gcc-4.8.1(卷二)

gcc-4.8.1(卷二).gcc编译器源代码,卷二

2014-07-19

rtems-4.10.0.tar.bz2

RTEMS实时操作系统源代码

2014-07-19

newlib-1.18.0-rtems4.10-20110518.diff

安装RTEMS交叉编译器时,所需的补丁

2014-07-17

gmp-4.3.2.tar.bz2

gmp-4.3.2,安装gcc编译器所需的源码包。

2014-07-17

gcc-4.8.1-rtems4.11-20130528.diff

用于安装RTEMS编译器的补丁

2014-07-17

FFmpeg学习资料

FFmpeg学习资料。一些文档,希望对读者有帮助

2014-05-25

waterfall_yuyv422格式文件

yuyv422格式图像文件。大小为352*288

2014-05-20

yuyv422格式图像文件

yuyv422格式图像文件。大小为352*288

2014-05-20

MSDN_1.2版本

MSDN 适合VC6.0.

2014-03-13

UNIX网络编程卷1:套接字联网API(第3版) (豆瓣)

UNIX网络编程卷1:套接字联网API(第3版) (豆瓣)

2013-12-31

UNIX网络编程 卷2:进程间通信 源代码

UNIX网络编程 卷2:进程间通信 源代码

2013-12-31

UNIX网络编程 卷1:源代码

UNIX网络编程(卷1):套接字联网API(第3版) 源代码

2013-12-31

pthreadGC2.dll

pthreadGC2.dll文件。用于运行的时候缺少这个库。

2013-12-28

gmp-4.2 安装包

linux环境下 安装 gcc 编译器 所需的工具

2013-10-16

mpc-0.8.1 源代码

linux 环境下 安装 gcc 编译器所需的工具

2013-10-16

mpfr-2.4.2

linux环境下 安装 gcc 编译所需的工具

2013-10-16

binutils-2.20.1

binutils-2.20.1 和它对应的RTEMS系统补丁。用于移植RTEMS系统

2013-10-16

newlib-1.18.0

newlib-1.18.0版本和它对应的RTEMS系统补丁。用于移植RTEMS系统

2013-10-16

用Qt写的截图程序源代码

用Qt编写的截图程序的源代码。类似qq截图那样的功能。

2013-09-02

windows gvim

gvim windows系统的vim编辑器

2013-06-03

Windows平台C语言获取文件的一些属性

Windows平台C语言获取文件的一些属性

2013-05-26

MSDN_Oct_2001.25

MSDN_Oct_2001.part25

2013-05-25

MSDN_Oct_2001.part30

MSDN_Oct_2001.part30

2013-05-25

MSDN_Oct_2001.part29

MSDN_Oct_2001.part29

2013-05-25

MSDN_Oct_2001.part28

MSDN_Oct_2001.part28

2013-05-25

MSDN_Oct_2001.part27

MSDN_Oct_2001.part27

2013-05-25

MSDN_Oct_2001.part26

MSDN_Oct_2001.part26

2013-05-25

MSDN_Oct_2001.part24

MSDN_Oct_2001.part24

2013-05-25

MSDN_Oct_2001.part23

MSDN_Oct_2001.part23

2013-05-25

MSDN_Oct_2001.part22

MSDN_Oct_2001.part22

2013-05-25

MSDN_Oct_2001.part21

MSDN_Oct_2001.part21

2013-05-25

MSDN_Oct_2001.part20

MSDN_Oct_2001.part20

2013-05-25

MSDN_Oct_2001.part19

MSDN_Oct_2001.part19

2013-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除