(三)libevent源文件结构

cmake链接libevent的问题 先说我的解决方案 使用 event 链接 # ... add_executable(demo <源文件>) # 注意是event target_link_libraies(demo event) #... 根据错误提示解决 我遇到的问题 根据一般习惯而言,使用cmake链接某个第三方库时,一般先使用find_package()由cmake帮忙找出相应的package。然后,在生成链接时,只需要使用target_link_libraries()即可。 然而上述的一般方案碰上 链接l 阅读详情

前言

在正式阅读源码之前,我们先对libevent的整体结构有大致的了解。这对我们在大体上了解libevent很有好处。

源文件结构

进入到libevent库目录里面一看,好像还挺多的,不过除去脚本还有.lo与.la这些用libtool编译出来的目标文件以及库文件,也没剩多少了。

主要分为事件头文件、内部头文件、事件主框架、对多种多路I/O复用的机制的封装、信号管理方面、定时事件管理方面、缓冲区管理方面、日志管理、基础数据结构、测试代码、Windows下的源文件、使用libevent实现的http服务器、使用libevent实现的dns查询库。大致就这些。

  • 事件头文件:
    1. event.h:里面定义了event结构体以及evbuffer结构体以及声明了event.c中需要使用的接口以及evbuffer.c需要使用的接口还有部分时间以及信号管理需要的宏函数
    2. event-internal.h):定义了struct eventop结构体,以及struct event_base结构体。还声明了一些接口。
  • 事件主框架(event.c):整个libevent的核心运行框架就在这里面,里面用到了其他各部分的接口及变量。
  • 多种多路I/O机制的封装:
    1. select.c:封装了select机制
    2. poll.c:封装了poll机制
    3. epoll.c:封装了epoll机制
    4. kqueue.c:封装了kqueue机制(这个没有了解过,貌似是在BSD系统上用的)
  • 信号管理:
    1. evsignal.h:定义了struct evsignal_info结构体,用于管理信号并声明了信号管理部分需要的接口。
    2. evsignal.c:定义了各种信号管理需要的接口,如信号管理的初始化、注册信号事件、删除信号事件以及将信号添加到就绪事件中。
  • 定时事件管理:
    1. min_heap.h:libevent管理定时事件是以小根堆来管理的,以时间为key,里面定义了小根堆的结构以及一些操作。还有一些关于时间的在evutil.c中。
  • 缓冲区管理(evbuffer.c和buffer.c):管理缓冲区部分
  • 日志管理(log.h和log.c):日志管理部分
  • 辅助函数(evutil.h和evutil.c):一些其他源文件会用到的辅助功能的函数
  • 基础数据结构:在compat目录下,queue.h里面实现了一些常用的数据结构,如双向链表、队列等,_libevent_time.h:一些关于时间操作的代码
  • 测试代码:在test和sample目录下,可以用于检测libevent库是否装好
  • Windows下的源文件:WIN32-Code和WIN32-Prj
  • 使用libevent实现的http服务器:主要是http.c和http-internal.h
  • 使用libevent实现的dns查询库:主要是evdns.c和evdns.h
  • 使用libevent实现的rpc服务器(Remote Procedure Call Protocol):主要是evrpc.h、evrpc.c、evrpc-internal.h
  • 注意带-internal.h的头文件,里面定义的一般都是libevent内部使用的成员及函数

大致顺序

接下来我们阅读源码的大致顺序是:

  1. 事件主框架
  2. 事件部分
  3. 事件主框架及主循环
  4. 信号部分
  5. 定时事件部分
  6. 时间管理
  7. libevent如何把多种I/O复用技术集合在一起
  8. 缓冲区管理
Scissor算法实战:利用bulkRNA表型数据精准定位单细胞亚群 本文详细介绍了Scissor算法的实战应用,该算法通过整合bulkRNA-seq的丰富表型信息与单细胞数据,精准识别与特定临床结局(如不良预后)相关的单细胞亚群。文章深入解析了算法三步走的核心思想,并提供了适配Seurat v5的完整代码解决方案,帮助研究者从海量数据中提炼具有生物学和临床价值的洞见。 阅读详情

相关推荐

医学影像处理实战:如何用Python+SimpleITK搞定DICOM/NIfTI重采样(附完整代码)

本文详细介绍了如何使用Python和SimpleITK库实现医学影像(DICOM/NIfTI格式)的智能重采样技术。通过实战代码演示,帮助读者掌握医学图像处理中的关键步骤,包括环境搭建、数据准备、核心算法实现和质量验证,解决医学AI领域中的影像标准化难题。

linux的博客 981

libevent中的基本数据结构

libevent中文件queue.c文件包含5种数据结构:单链表,双向链表,队列,尾队列,环形队列。在处理I/O和signal中的事件时,用的就是尾队列,下面就介绍这几种数据结构 1、单链表 链表头用宏SLIT_HEAD来定义 #define SLIST_HEAD(name, type) \ struct name { \ struct

多看多听多总结 1475

用树莓派搭建全功能NAS服务器(01):树莓派基础操作&OMV搭建

写在前面 对于文件互传来说,局域网和云盘的操作总是独立的,而且很难将两者的优势合为一体。如果想要集多种优势为一体,那么NAS应该就是较为完美的解决方案了。 在这个系列中我们尽量跳过一些枯燥的理论知识,专注于说明两件事:   1.NAS是什么&能做什么 2.搭建思路&怎么做   这中间也会涉及到一些方案的选择,同类方案我也会列出来和大家分享我已知的优缺点,有兴趣可以多种尝试。(侧重于软件) 虽然是用树莓派搭建的,但是对于debian linux系统下的NAS搭建有着很好的参

斯塔克家的真维斯的工作间 2万+

libevent的http服务详解

libevent的http服务详解 即远程调用,得到一个call ID然后验证外部远程参数 evrpc_request_cb(struct evhttp_request *req, void *arg) { struct evrpc *rpc = arg; // 用来自动解析缓冲区数据的,外部验证参数也是从这里过来的 struct evrpc_req_generic *rpc_state = NULL; // 会模拟一个钩子,在等待事件的到来 if (req->type !=

m0_47178337的博客 2415

IEEE LaTeX模板中algorithm排版避坑指南:如何优雅地嵌入算法描述?

本文详细解析了在IEEE LaTeX模板中优雅排版algorithm的实用技巧,包括基础配置、高级自定义及常见问题解决方案。通过嵌套环境与[H]参数的应用,帮助研究者克服IEEEtran模板对算法排版的限制,实现专业且美观的算法呈现。

weixin_28340315的博客 408

两层板如何做阻抗控制呢

两层板如何做阻抗控制呢? 这个问题可能很多人都会碰到,有的人在此等需要做阻抗控制的情况都选择做多层板。诚然,多层板在阻抗控制,EMC等等方面都有着天然的优势。然而,在价格上和周期上,两层板就有着绝对优势了。 对于成本非常敏感而又不是太复杂的产品,尽管对于我们硬件工程师而言,有一堆的理由要求使用多层板。然而在面对毛都不懂的老板“别人能做,你为什么不能做?”这个问题时只得低下我们高傲的头颅。 好...

weixin_42005993的博客 2万+

网络编程-libevent安装和简单介绍

​ 也可以直接到官网上下载源码包来安装。http://libevent.org/ #在当前目录下解压安装包: tar -zxvf libevent-2.0.22-stable.tzr.gz cd libevent-2.0.22-stable #配置安装库的目标路径: ./configure --prefix=/usr #编译安装libevent库: make make install #查看libevent库是否安装成功: ...

算法攻城狮 416

基于STM32的宠物智能照护嵌入式系统设计

嵌入式系统是实现物联网终端设备本地化感知、决策与执行的核心技术载体,其关键在于多传感器融合、低功耗执行控制与轻量级云边协同。本文围绕环境监测(温湿度、烟雾、余粮)、机电执行(步进电机食盘、继电器风扇)和可靠通信(MQTT+ESP8266)三大技术主线,深入解析STM32F103在资源约束下的外设调度策略、ADC采样抗干扰设计、DHT11时序精准控制及HX711称重滤波算法等工程实践要点。系统强调本地闭环优先原则,确保离线基础功能可用,同时通过阿里云IoT平台实现远程监控与告警联动,为中小型智能硬件项目提供可

weixin_29155599的博客 293

libevent 基础概念

本文参照《libevent参考手册》做的笔记,如有错,感谢指正!(以后文章要写在word文档里,然后复制到博客上,刚才写的文章是网络原因还是怎么了没有保存好,就没了!一次心痛的教训。咳咳咳…) 简要: 利用libevent编写服务端程序,主要有3部分 1.base = event_base_new();创建主通知链base; 2.listener_event = event_new(); 创建要监听的事件, event_add();并将其加入到主通知链中; event_free(); 释放由

opkg list 486

Microchip Studio 7.0 从零开始:下载、安装到首个AVR工程实战

本文为AVR单片机开发新手提供了Microchip Studio 7.0的完整入门指南。从官方下载、避坑安装,到创建首个GCC C工程、编写LED闪烁代码,再到项目配置、仿真调试与程序烧录,手把手带你完成从零到一的实战过程,是掌握AVR开发环境的必备教程。

weixin_29200741的博客 520

新手必看:5分钟搞懂FFT波束形成的底层原理(从阵列信号到频域处理)

本文深入浅出地解析了FFT波束形成的底层原理,从阵列信号采集到频域处理的全过程。通过音乐节场景类比和Python代码示例,帮助新手快速理解多目标波束形成的核心技术,包括频域转换、相位补偿和性能优化策略,适用于雷达、声呐和5G通信等领域。

pytorchlight8的博客 948

Libevent简介和使用

Libevent是一个用C语言编写的基于事件触发的开源高性能网络库。著名的分布式缓存软件memecached也是基于libevent,适用于windows,linux,ios等多种平台。大量用到回调函数(函数指针)的方法。于此类似的有ACE,ASIO。优点: 1.libevent是一个事件触发的网络库。专注与网络 2.跨平台。 3.使用select,dev/poll(Solaris),

码上助君的专栏 2892

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

详解Libevent网络库

项目中要用到libevent,所以就自学了libevent,参考资料为张亮的《libevent源码深度剖析》和《linux高性能服务器编程》Libevent简介Libevent是开源社区一款高性能的I/O框架库,其具有如下特点:1.跨平台支持。Libevent支持Linux、UNIX和Windows。2.统一事件源。libevent对i/o事件、信号和定时事件提供统一的处理。3.线程安全。libe...

century_sunshine的博客 3万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

libevent源码

Libevent 的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent 框架、对系统 I/O 多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于 libevent的两个实用库等几个部分,有些部分可能就是一个源文件。 (1)头文件 主要就是 event.h:事件宏定义、接口函数声明,主要结构体 event 的声明; (2)内部头文件 xxx-internal.h:内部数据结构和

Mac Track 2093

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

libevent源代码初识及目录结构分析

1.libevent源代码获取 最新代码直接从libevent的github即可,链接如下: https://github.com/libevent/libevent 编译方法在该github介绍页说的很详细了,这里不再多说。 2.libevent源代码的目录结构 我们下载下来源代码以后,看到有很多文件,很多目录,往往不知道从何入手,我一开始也是这样,后来我花时间把每个目录和一些主要的文件内容弄明...

cpp加油站的专栏 454

libevent学习笔记五:libevent源代码文件组织结构

libevent学习笔记五:libevent源代码文件组织结构 1 ,前言 详细分析源代码之前,如果能对其代码文件的基本结构有个大概的认识和分类,对于代码的分析将是大有裨益的。本节内容不多,我想并不是说它不重要! 2 ,源代码组织结构 Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、...

jyl_sh的专栏 1112

[libevent]Libevent介绍与编译

编译libevent 1.在此下载,最新的libevent压缩包libevent-2.0.22-stable.tar.gz 。源文件有个问题,evutil.c源码修改这部分。不然使用会失败。 #ifdef WIN32 #include #include #pragma comment(lib,"ws2_32.lib") #define WIN32_LEAN_AND_MEAN #inclu

超越 3025

libevent学习笔记

libevent学习笔记 学习资料:链接:百度网盘 提取码:jqsp 包括libevent源码剖析,参考手册 另外推荐一个网站:学习网站 libevent工作结构 libevent是高性能i/o网路库,基于reactor事件驱动模型。 下面这张图直观地展示了libevent的工作模式。 这是Reactor模式的几个必备组件,事件源(Handle),Reactor框架,事件多路分发器(Event Demultiplexer),事件处理器(Event Handle),具体的事件处理器(Concrete Eve

Q755100802的博客 593

libevent源码分析(三) 源代码文件组织结构

打开下载好的libeventlibeventlibevent源文件夹,会发现其所有的源文件都在此目录下;代码分类大致分为头文件、内部使用的头文件、辅助功能函数、日志、libeventlibeventlibevent 框架、对系统 I/OI/OI/O 多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于 libeventlibeventlibevent 的两个实用库等几个部分。...

小二笙的博客 350

libevent源码深度剖析四

前言 详细分析源代码之前,如果能对其代码文件的基本结构有个大概的认识和分类,对于代码的分析将是大有裨益的。本节内容不多,我想并不是说它不重要! 源代码组织结构 Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、对系统I/O多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基...

Stay Hungry, Stay Foolish 425

libevent源码分析--代码结构

Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为 头文件、内部使用的头文件、辅助功能函数、日志、libevent 框架、对系统I/O多路复用机 制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于libevent的两个实 用库等几个部分,有些部分可能就是一个源文件。 源代码中的test部分就不在我们关注的范畴了。 1)头文件 主要就是

鱼思故渊的专栏 2621

libevent2

# # Create the libraries. # include(AddEventLibrary) add_event_library(event_core SOURCES ${SRC_CORE}) add_event_library(event_extra LIBRARIES event_core_shared SOURCES ${SRC_EXTRA}) if (NOT EVENT__DISABLE_OPENSSL) add_event_library(even...

突围 1041

libevent源代码结构

——libevent源代码文件组织 1 前言 详细分析源代码之前,如果能对其代码文件的基本结构有个大概的认识和分类,对于代码的分析将是大有裨益的。本节内容不多,我想并不是说它不重要! 2 源代码组织结构 Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、对系统I/O多路

一直在路上 697

libevent库移植

Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事...

weixin_43608153的博客 753

libevent源码深度剖析之源代码组织结构

第一章 源代码组织结构 Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、对系统I/O多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于libevent的两个实用库等几个部分,有些部分可能就是一个源文件。 源代码中的test部分就不在我们关注的范畴了 1)头文件 ...

努力才会有幸福 461

libevent源码结构简介

1)头文件 主要就是event.h:事件宏定义、接口函数声明,主要结构体event的声明; 2)内部头文件 xxx-internal.h:内部数据结构和函数,对外不可见,以达到信息隐藏的目的; 3)libevent框架 event.c:event整体框架的代码实现; 4)对系统I/O多路复用机制的封装 epoll.c:对epoll的封装; select.c:对select的封装;

happyAnger6的专栏 1304
上一篇: (四)初探反应器(event_base)
下一篇: (五)struct event结构体
UKey_
博客等级 码龄10年 258粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值