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.h和event-internal.h中),并没有导出来。

相关推荐
iCxhust38 分钟前
C语言struct结构体实现类定义
c语言·开发语言·单片机·嵌入式硬件·51单片机
DevNo1 小时前
我的医学考研学习品牌接触记录
学习·考研
重生之我复员之后重当黄毛1 小时前
vscode配置c/c++环境
c语言·前端·visual studio
传奇开心果编程1 小时前
【ArkUI进阶练中学】第9课:分布式能力与多设备协同
学习·ui·华为·harmonyos
shangan_31 小时前
C语言学习
c语言·开发语言·学习
每天题库1 小时前
汽车维修工考试题库:真题错题复盘与高频考点清单
学习·安全·考试·题库·考证
阳光九叶草LXGZXJ2 小时前
达梦数据库-学习-71-存过执行过程中重建存过影响验证
linux·运维·数据库·sql·学习
小O的算法实验室2 小时前
IEEE TEVC,搜索方向学习加速大规模煤矿综合能源系统调度中的进化优化
学习·能源
李永奉10 小时前
C语言-指针函数与函数指针及回调函数的使用
c语言·开发语言
杨丰玮41811 小时前
C语言基础知识(一)————各类符号的含义与输入输出库(stdio)
c语言·开发语言