【Nginx】基本数据结构
整型的封装
typedef intptr_t ngx_int _t;//有符号整型
typedef uintptr_t ngx_uint_t;//无符号整型
字符串的封装
typedef struct { size_t len; u_char *data; }ngx_str_t;
链表容器的封装
typedef struct ngx_list_part_s ngx_list_part_t; //链表结点 struct ngx_list_part_s { void *elts;//数组的起始地址 ngx_uint_t nelts;//数组中已经使用的元素个数,必须小于nalloc ngx_list_part_t *next;// }; typedef struct { ngx_list_part_t *last; ngx_list_part_t part; size_t size;//ngx_list_part_t中元素的大小上限 ngx_uint_t nalloc;//每个ngx_list_part数组的容量 ngx_pool_t *pool;//链表中管理内存分配的内存池对象 }ngx_list_t;
对于链表,Nginx提供的接口包括:
//pool为内存池对象,size是结点中数组的每个元素的大小,n是数组中可容纳元素的个数,即结点大小为n*size
ngx_list_t *ngx_list_create(ngx_pool_t *pool,ngx_uint_t n,size_t size);
//初始化一个已有的链表
static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list,ngx_pool_t *pool,ngx_uint_t n,size_t size);
//添加新的元素
void *ngx_list_push(ngx_list_t *list);
ngx_table_elt_t数据成员
typedef struct
{
ngx_uint_t hash;
ngx_str_t key;
ngx_str_t value;
u_char *lowcase_key;
}ngx_table_elt_t;
ngx_table_elt_t常用于http头部。
ngx_buf_t数据结构
缓冲区ngx_buf_t是Nginx处理大数据的关键数据结构,它既应用于内存数据也应用于磁盘数据。
ngx_chain_t数据结构
ngx_chain_t是与ngx_buf_t配合使用的链表数据结构。
typedef struct ngx_chain_s ngx_chain_t;
struct ngx_chain_s
{
ngx_buf_t *buf;
ngx_chain_t *next;
};