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中),并没有导出来。

相关推荐
玩具猴_wjh1 分钟前
11.30 学习笔记
笔记·学习
诺狞猫2 分钟前
黄山派 TF卡使用
科技·学习·黄山派·思澈·sifli
不知所云,8 分钟前
2.windows c/c++ 编译器安装, mingw和clang
c语言·c++·windows·mingw·clang·c编译器
LCG米16 分钟前
工业自动化嵌入式开发实战:基于ARM7与μC/OS-II的焊接机控制系统设计与实现
运维·c语言·自动化
Yue丶越33 分钟前
【C语言】内存函数
c语言·开发语言
apocelipes1 小时前
Linux的binfmt_misc机制
linux·c语言·c++·python·golang·linux编程·开发工具和环境
渡我白衣1 小时前
哈希的暴力美学——std::unordered_map 的底层风暴、扩容黑盒与哈希冲突终极博弈
java·c语言·c++·人工智能·深度学习·算法·哈希算法
雷工笔记1 小时前
MES学习笔记之MES系统的作用和定位及与SCADA的关系
大数据·笔记·学习
c***93771 小时前
Spring Security 官网文档学习
java·学习·spring
韩曙亮1 小时前
【人工智能】AI 人工智能 技术 学习路径分析 ③ ( NLP 自然语言处理 )
人工智能·pytorch·学习·ai·自然语言处理·nlp·tensorflow