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

相关推荐
云深处@3 小时前
【数据库】MySQL 入门
数据库·学习·mysql
坚持编程的菜鸟3 小时前
编写判断大小端程序
c语言·算法·判断大小端
HyperAI超神经3 小时前
【vLLM 学习】Disaggregated Prefill
人工智能·深度学习·学习·vllm
天吾cc3 小时前
RTT-IO设备模型
单片机·嵌入式硬件·学习
美味蛋炒饭.3 小时前
Git 版本控制(下)
开发语言·git·学习·总结·后端开发
呼噜想睡觉4 小时前
Bootstrap 组件之响应式导航条实现
学习
不负岁月无痕4 小时前
简单理解操作系统结构
java·linux·c语言·开发语言·c++·面试
菜鸟‍4 小时前
【论文学习】Medical Image Analysis 2024 || 医学图像分割中失败检测方法的比较基准研究:揭示置信度聚合的作用
人工智能·学习
qq_448011165 小时前
C语言中的指针函数和函数指针
java·c语言·开发语言
爱音乐的marlon5 小时前
FastAPI 学习笔记03|core 核心层:config 是总控制台,database 是整个工程的地基
笔记·学习·fastapi