Nginx基本数据结构(三)——ngx_chain_t、ngx_buf_t

ngx_chain_t

Nginx的filter模块用来处理从别的filterhandler模块传递过来的数据。这个传递的过程是以一个链表(ngx_chain_t)的形式。而且数据可能会被多次传递。

struct ngx_chain_s
{
   
	ngx_buf_t		*buf;
	ngx_chain_t		*next;
}

相关操作API

ngx_chain_t* ngx_alloc_chain_link(ngx_pool_t* pool);
//创建一个ngx_chain_t对象,并返回指向对象的指针,失败返回null
#define ngx_free_chain(pool, cl)
	cl->next = pool->chain;
	pool->chain = cl

//该宏释放一个ngx_chain_t对象
//对ngx_chain_t的释放,不是真正的释放内存,而是把这个对象挂在了这个pool对象的一个叫chain字段对应的chain上

ngx_buf_t

这个就是上面ngx_chain_t链表的每个节点的实际数据。

struct ngx_buf_s
{
   
	u_char			*pos;			//数据的开始位置
	u_char			*last;			//数据结束位置
	off_t			file_pos;		//如果是文件的话,数据开始位置
	off_t			file_last;		//如果是文件,数据结束位置

	u_char			*start;			//内存起始位置
	u_char			*end;			//内存结束位置
	ngx_buf_tag_t	tag;
	ngx_file_t		*file;			//对应的文件
	ngx_buf_t		*shadow;		
	
	unsigned		temporary:1;

	unsigned		memory:1;

	unsigned		mmap:1;

	unsigned		recycled:1;
	unsigned		in_file:1;
	unsigned		flush:1;
	unsigned		sync:1;
	unsigned		last_buf:1;
	unsigned		last_in_chain:1;

	unsigned		last_shadow:1;
	unsigned		temp_file:1;
};

相关操作API

#define ngx_alloc_buf(pool) ngx_palloc(pool, sizeof(ngx_buf_t))
#define ngx_calloc_buf(pool) ngx_pcalloc(pool, ngx_buf_t)

ngx_buf_t* ngx_create_temp_buf(ngx_pool_t* pool, size_t size);
/*创建一个ngx_buf_t对象,返回指向这个对象的指针 * pool 分配该buf和buf使用的内存所使用的pool * size 该buf使用的内存的大小 */
//以下宏配合bgx_buf_t使用

#define ngx_buf_in_memory(b) (b->temporary || b-<memory ||b->mmap)
//返回buf是否有内容

#define ngx_buf_in_memory_only(b) (ngx_buf_in_memory(b) && !b->infile)
//返回buf内容只在文件而不在文件中

#define ngx_buf_special(b)
	((b->flush || b->last_buf || b->sync)
	 && !ngx_buf_in_memory(b) && !b->in_file)
//返回这个buf是否是一个特殊的buf

#define ngx_buf_synconly(b)
	(b->sync && !ngx_buf_in_memory(b) && !b->in_file)
//返回该buf是否是一个只包含sync标志而不包含真正数据的特殊buf

#define ngx_buf_size(b)
	(ngx_buf_in_memory(b) ? (off_t)(b->last - b->pos):(b->file_last - b->file_pos))
//返回该buf所含数据的大小,不管数据在哪里

参考文献

[1] Nginx开发从入门到精通
全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
评论
1
1
分享
正在热议
# 25届秋招总结 #
442870次浏览 4513人参与
# 春招别灰心,我们一人来一句鼓励 #
42047次浏览 534人参与
# 阿里云管培生offer #
120338次浏览 2220人参与
# 地方国企笔面经互助 #
7969次浏览 18人参与
# 同bg的你秋招战况如何? #
76925次浏览 565人参与
# 实习必须要去大厂吗? #
55786次浏览 961人参与
# 北方华创开奖 #
107451次浏览 600人参与
# 虾皮求职进展汇总 #
115973次浏览 886人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11632次浏览 289人参与
# 实习,投递多份简历没人回复怎么办 #
2454828次浏览 34858人参与
# 提前批简历挂麻了怎么办 #
149917次浏览 1978人参与
# 在找工作求抱抱 #
906063次浏览 9421人参与
# 如果公司给你放一天假,你会怎么度过? #
4760次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1195992次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157640次浏览 2267人参与
# 双非本科求职如何逆袭 #
662310次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12786次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35857次浏览 384人参与
# 简历中的项目经历要怎么写? #
86928次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20142次浏览 240人参与
# 我的上岸简历长这样 #
452040次浏览 8089人参与
牛客网
牛客企业服务