05_libevent的事件数量分析
libevent的事件数量分析下面的代码展示了一个基本的事件驱动程序,通过创建一个定时器事件并运行事件循环来触发事件。通过打印事件基的状态,打印了事件基中不同类型事件的数量,包括活动事件、虚拟事件、已添加事件等, 我们可以观察到事件的变化情况。这对于理解和调试基于 libevent 的事件驱动程序非常有用。
程序1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071#include "event2/event.h"#include <stdio.h>#include <time.h>#define PRT_VAL_INT(x) printf("\t%s = %d\n", #x, x)static void print_current_event_num(struct event_base *base, const ...
libevent的日志模块基本使用
libevent的日志模块的使用123456789101112131415161718192021222324252627282930#include "event2/event.h"#include <stdio.h>#include <time.h>static void event_selfarg_cb(evutil_socket_t fd, short event, void *arg) { struct event *ev = arg; struct event_base *base = event_get_base(ev); printf("===event trigger %p == %p, is %s\n", ev, event_base_get_running_event(base), ev == event_base_get_running_event(base)?"true":"false"); event_base_loope ...
04.02_libevent创建tcp服务端与tcp客户端
libevent创建tcp服务端与tcp客户端libevent的tcp回射(echo)程序
libevent的tcp服务端程序源码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164/** * @brief 使用libevent编写的tcp服务端程序 * 接受客户端 ...
libevent的watch模块详解
libevent的watch模块详解示例代码在 libevent 中,evwatch 提供了准备 (prepare) 和检查 (check) 事件,它们分别在事件基准备进入事件循环和事件循环即将开始处理事件之前触发。通过记录这两个时间点,并计算它们之间的时间差,可以获得一些有用的信息。这些信息可以帮助开发者了解事件循环的行为,优化应用程序性能,以及调试与事件调度相关的问题。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192#include <math.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include <eve ...
git的merge和rebase的使用方法
git分支合并在工作开发时,常用git作为版本控制。开发的过程中,一般不在主分支上开发,会拉出一个功能分支(feature)进行开发。功能开发完成后,再通过git merge把功能分支上的代码合并到主分支中。
有时我们在功能分支上提交了很多冗余的commit,我们想要把这些commit合并到一起,提交到主分支中。这时可以使用git rebase命令,进行变基,把冗余的commit合并到一起。
mergegit merge的常用选项参数
git merge --abort
该命令仅仅在合并后导致冲突时才使用。git merge --abort将会抛弃合并过程并且尝试重建合并前的状态。但是,当合并开始时如果存在未commit的文件,git merge --abort在某些情况下将无法重现合并前的状态。(特别是这些未commit的文件在合并的过程中将会被修改时)。
git merge --ff
--ff是指fast-forward命令。当使用fast-forward模式进行合并时,将不会创造一个新的commit节点。默认情况下,git-merge采用fast-forward模式。
git ...
04_libevent的基本使用
💻四,基本使用示例此章节中,会给出关于libevent的一些基本使用示例程序,libevent的高级特性部分在[第五章节部分](/*//todo*/)会讲解到。如果你已对libevent有一定的了解,此部分可以跳过。
05.01_libevent的event_base源码详解
libevent的event_base源码详解event_base在 libevent 中,event_base(事件基) 是一个核心组件,它负责管理所有的事件及其相关的回调函数。event_base 实际上是一个事件循环(Event Loop)的基础,用于监控和调度事件。每个 event_base 实例都是一个独立的事件管理系统,可以用来管理一组事件,并且可以独立于其他 event_base 实例运行。
创建事件基在开始使用 libevent 之前,需要创建一个 event_base 实例。这通常是在程序启动时完成的,因为 event_base 是整个事件处理系统的中心。
event_base 可以通过以下两种方式创建:
使用 event_base_new 函数:
1struct event_base *event_base_new(void);
这个函数创建一个新的 event_base 实例,并返回指向该实例的指针。如果创建失败,则返回 NULL。
使用 event_base_new_with_config 函数:
1struct event_base *event_base ...
05.02_libevent的event源码详解
libevent的event源码详解event在 libevent 中,struct event 代表一个具体的事件,它可以是一个文件描述符上的读写事件、定时器事件、信号事件等。每个事件都有一个关联的 event_base,并且可以被添加到 event_base 中进行监控。事件是 libevent 库中最基本的功能单元之一,它允许开发者定义回调函数来响应特定类型的事件。
创建事件创建一个事件通常需要指定以下几个参数:
**event_base**:事件所属的事件基(event_base)。
**fd**:文件描述符,用于监听读写事件(定时器事件可以是-1)。
**flags**:事件标志,指定事件类型(如 EV_READ、EV_WRITE)。
**callback**:事件触发时调用的回调函数。
**arg**:传递给回调函数的参数。
可以使用 event_new 函数来创建一个新的事件:
1struct event *event_new(struct event_base *base, int fd, short flags, void (*callback)(evutil_s ...
05.03_libevent的event日志模块详细
libevent的event日志模块详细libevent 日志模块libevent 的日志模块提供了日志记录的功能,这对于调试和运维非常重要。通过日志,开发者可以跟踪应用程序的运行情况,定位问题所在,并进行性能分析。libevent 提供了灵活的日志配置选项,可以根据不同的需求调整日志级别和输出目标。
日志级别libevent 支持多种日志级别,这些级别可以帮助开发者区分不同重要性的日志消息。常见的日志级别包括:
**LOG_EMERG**:系统不可用。
**LOG_ALERT**:必须立即采取措施。
**LOG_CRIT**:关键条件。
**LOG_ERR**:错误条件。
**LOG_WARNING**:警告条件。
**LOG_NOTICE**:正常但显著的条件。
**LOG_INFO**:信息性消息。
**LOG_DEBUG**:调试信息。
日志级别的设置决定了哪些日志消息会被记录。例如,设置日志级别为 LOG_DEBUG 将记录所有级别的日志消息,而设置为 LOG_INFO 只会记录 INFO 级别及其以上的消息。
日志配置libevent 的日志模块可以通过设置环境变量或调 ...
05_libevent的源码详解
五,libevent源码详解本章节会给出libevent的源码详解,具体划分章节如下:
libevent的源码组织libevent 源码目录结构如下所示:
123456789101112131415161718192021222324libevent/├── include/ # 包含头文件│ ├── event2/│ │ └── event-config.h # 配置宏定义│ └── event.h # 主要的API头文件├── src/ # 源代码文件│ ├── base/│ │ ├── evthread.c # 线程相关的实现│ │ ├── evutil.c # 实用工具函数│ │ └── ... # 其他基础组件│ ├── buffer/│ │ ├── evbuffer.c # 缓冲区管理│ │ └── ...│ ├── openssl/│ │ ├── ...