libevent数据结构——TAILQ_结构体

TAILQ_结构体

TAILQ_结构体在文件event2/event_struct.h和文件event2/keyvalq_struct.h中都有定义,并且他们的定义都是一样的,定义了TAILQ_ENTRY、TAILQ_HEAD结构体:

c 复制代码
#ifndef TAILQ_ENTRY
#define EVENT_DEFINED_TQENTRY_
#define TAILQ_ENTRY(type)						\
struct {								\
	struct type *tqe_next;	/* next element */			\
	struct type **tqe_prev;	/* address of previous next element */	\
}
#endif /* !TAILQ_ENTRY */

#ifndef TAILQ_HEAD
#define EVENT_DEFINED_TQHEAD_
#define TAILQ_HEAD(name, type)			\
struct name {					\
	struct type *tqh_first;			\
	struct type **tqh_last;			\
}
#endif

同时,我们还发现在include 的同级目录下有一个compat/sys/queue.h中也定义了TAILQ_相关的结构体,并且还定义了一些相关的操作宏,这个放到以后说。

由这两个结构体配合构造出来的队列一般如下图所示:

图中,一级指针指向的是queue_entry_t这个结构体,即存储queue_entry_t这个结构体的地址值。二级指针存储的是一级地址变量的地址值。所以二级指针指向的是图中的一级指针,而非结构体。图中的1,2, 3为队列元素保存的一些值。

队列操作宏函数以及使用例子

这部分似乎只是在libevent内部使用(文件compat/sys/queue.hevent-internal.h中),并没有导出来。

相关推荐
Ws_9 小时前
C#学习 Day2
开发语言·学习·c#
神谕的祝福10 小时前
comfyui从0到1开始学习-第三讲生图与降噪实验
学习
星夜夏空9910 小时前
STM32单片机学习(32) —— ADC
stm32·单片机·学习
愚者Pro13 小时前
Flutter Widget组件学习(专为 Uniapp 转 Flutter 定制)
vue.js·学习·flutter·uni-app
枕星而眠14 小时前
数据结构八大排序详解(一):四大简单排序
c语言·数据结构·c++·后端
努力努力再努力wz14 小时前
【Qt入门系列】:按钮组件全解析:从 QAbstractButton 到快捷键事件、单选与复选机制
c语言·开发语言·数据结构·c++·git·qt·github
yzx99101315 小时前
从焦虑到掌控:关于学习AI工具的深度思考
人工智能·学习
Bechamz15 小时前
大数据开发学习Day42
大数据·学习
zhangrelay15 小时前
ROS 2 Lyrical Luth启程-Ubuntu26.04-
linux·笔记·学习·ubuntu
锦鲤521415 小时前
机器学习学习笔记
笔记·学习·机器学习