Nginx基本数据结构之ngx_chain_t
nginx的filter模块在处理从别的filter模块或者是handler模块传递过来的数据(实际上就是需要发送给客户端的http response)。这个传递过来的数据是以一个链表的形式(ngx_chain_t)。而且数据可能被分多次传递过来。也就是多次调用filter的处理函数,以不同的ngx_chain_t。
该结构被定义在src/core/ngx_buf.h|c。下面我们来看一下ngx_chain_t的定义。
typedef struct ngx_chain_s ngx_chain_t;struct ngx_chain_s {ngx_buf_t *buf;ngx_chain_t *next; };
就2个字段,next指向这个链表的下个节点。buf指向实际的数据。所以在这个链表上追加节点也是非常容易,只要把末尾元素的next指针指向新的节点,把新节点的next赋值为NULL即可。
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类型的对象。如果要释放整个chain,则迭代此链表,对每个节点使用此宏即可。
注意: 对ngx_chaint_t类型的释放,并不是真的释放了内存,而仅仅是把这个对象挂在了这个pool对象的一个叫做chain的字段对应的chain上,以供下次从这个pool上分配ngx_chain_t类型对象的时候,快速的从这个pool->chain上取下链首元素就返回了,当然,如果这个链是空的,才会真的在这个pool上使用ngx_palloc函数进行分配。
Nginx基本数据结构之ngx_chain_t相关推荐
- Nginx学习笔记(三) Nginx基本数据结构
话说学习一种编程语言,例如C语言,我们首先学的也是数据结构,这是以后开发程序的关键.为了更好更方便的开发Nginx,Nginx自己实现了很多适合nginx的数据结构. Nginx中的数组 ngx_ar ...
- Nginx基本数据结构之ngx_buf_t
这个ngx_buf_t就是这个ngx_chain_t链表的每个节点的实际数据.该结构实际上是一种抽象的数据结构,它代表某种具体的数据.这个数据可能是指向内存中的某个缓冲区,也可能指向一个文件的某一部分 ...
- Nginx基本数据结构之ngx_pool_t
ngx_pool_t是一个非常重要的数据结构,在很多重要的场合都有使用,很多重要的数据结构也都在使用它.那么它究竟是一个什么东西呢?简单的说,它提供了一种机制,帮助管理一系列的资源(如内存,文件等), ...
- Nginx基本数据结构之ngx_hash_keys_arrays_t
大家看到在构建一个ngx_hash_wildcard_t的时候,需要对通配符的哪些key进行预处理.这个处理起来比较麻烦.而当有一组key,这些里面既有无通配符的key,也有包含通配符的key的时候. ...
- nginx基本数据结构ngx_module_t,ngx_module_s
ngx_module_t是nginx的模块化架构最基本的数据结构. 其结构定义如下,其中的注释为功能说明: struct ngx_module_s { ngx_uint_t c ...
- Nginx基础数据结构分析-ngx_chain_t
nginx的filter模块在处理从别的filter模块或者是handler模块传递过来的数据(实际上就是需要发送给客户端的http response).这个传递过来的数据是以一个链表的形式(ngx_ ...
- Nginx基本数据结构之ngx_hash_t
ngx_hash_t是nginx自己的hash表的实现.定义和实现位于src/core/ngx_hash.h|c中.ngx_hash_t的实现也与数据结构教课书上所描述的hash表的实现是大同小异.对 ...
- Nginx基本数据结构之ngx_str_t
nginx的作者为追求极致的高效,自己实现了很多颇具特色的nginx风格的数据结构以及公共函数.比如,nginx提供了带长度的字符串,根据编译器选项优化过的字符串拷贝函数ngx_copy等.所以,在我 ...
- nginx基本数据结构及接口
简单的数据类型 在core/ngx_confing.h中定义了基本的数据类型的映射,大部分都映射到c语言自身的数据类型: typedef intptr_t ngx_int_t; type ...
最新文章
- 体系化认识RPC--转
- k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means
- 把普通的git库变成bare库
- 【verilog语法】关于testbench与被测module的输入输出数据类型定义:reg/wire原因
- IOS 实现TXT文本自动识别编码的方法
- mysql 排他,mysql 共享锁 排他锁 防插入锁
- oracle sql切换模式,Oracle SQL 模式下命令回退
- 【ElasticSearch】ElasticSearch 7.x 默认不在支持指定索引类型 Failed to parse mapping [_doc]: Root mapping definitio
- 谈一谈商品编码的问题
- 5101是多大的电阻_电阻尺寸对照表
- 中国智能经济觉醒,云智一体打造产业智能化加速器
- Python信息轰炸
- 云服务器无法连接怎么办
- 设置linux睡眠时间,Linux 睡眠时间函数如何使用?延迟指定时间sleep命令了解一下...
- 基于Amos路径分析的模型修正与调整
- 2021年7月程序员工资统计,平均15302元
- 这个Q版卡通头像生成器,太符合程序员形象了
- 判断清浊音 matlab,基于MATLAB的语音信号的清浊音分析.doc
- 2021鹏业安装算量软件常见问题整理(二十)
- spring @Value 的取值顺序 优先级
热门文章
- python函数库 阶跃 信号函数 调用_有没有大神知道 step2 阶跃响应函数的 里面的T的怎么定义...
- hanlp加载预训练模型
- python列表注解
- Python生成(x,y,z)三维坐标序列
- selenium配置无界面chrome浏览器
- 大一C语言大作业ip合法性,c语言实现判断ip地址是否合法
- 地面波天线怎样能多收台_GPS天线的分类介绍及应用
- 从python入门到放弃_《Python3从入门到放弃》视频教程
- c语言判断任意位数能否倒序数,C语言求助!一个三位数的逆序数,总是编不对...
- Java可以用到军事方面吗_恭喜遥三运载火箭发射成功,浅谈java在军事方面的运用!...