1 定义
ngx_create_temp_buf 函数 定义在 ./nginx-1.24.0/src/core/ngx_buf.c
ngx_buf_t*ngx_create_temp_buf(ngx_pool_t*pool,size_tsize){ngx_buf_t*b;b=ngx_calloc_buf(pool);if(b==NULL){returnNULL;}b->start=ngx_palloc(pool,size);if(b->start==NULL){returnNULL;}/* * set by ngx_calloc_buf(): * * b->file_pos = 0; * b->file_last = 0; * b->file = NULL; * b->shadow = NULL; * b->tag = 0; * and flags */b->pos=b->start;b->last=b->start;b->end=b->last+size;b->temporary=1;returnb;}
ngx_create_temp_buf 函数 用于在给定的 Nginx 内存池中快速创建一个临时的可写缓冲区。 它分配并初始化一个 `ngx_buf_t` 结构体, 同时从同一池中分配 `size` 字节的连续内存作为该缓冲区的数据存储区, 设置读写位置指针(`pos`、`last` 指向起始处,`end` 指向结束边界), 并标记为临时缓冲区(`temporary = 1`),供后续数据暂存与处理使用。
2 详解
1 函数签名
ngx_buf_t*ngx_create_temp_buf(ngx_pool_t*pool,size_tsize)
函数返回一个ngx_buf_t 缓冲区结构体的地址
参数1 ngx_pool_t *pool 指向 Nginx 内存池结构体的指针 本函数中 所有内存分配(包括 ngx_buf_t 结构体本身,及其内部数据区 start 指向的内存块) 都从这个指定的内存池中申请。
参数2 size_t size 指定要为缓冲区数据区分配的连续内存大小, 即 b->start 指向的内存块的长度(单位字节)。 这也是缓冲区可写入的最大字节数(超出会越界)。
2 逻辑流程
1 分配结构体 2 分配缓冲区 3 初始化各个字段
1 分配结构体
{ngx_buf_t*b;b=ngx_calloc_buf(pool);if(b==NULL){returnNULL;}
调用 ngx_calloc_buf(pool), 从内存池 pool 中分配一个 ngx_buf_t 结构体, 并将分配的内存全部清零。
2 分配缓冲区
b->start=ngx_palloc(pool,size);if(b->start==NULL){returnNULL;}
从同一个内存池 pool 中分配 size 字节的连续内存, 并将其首地址赋给 b->start。
3 初始化各个字段
/* * set by ngx_calloc_buf(): * * b->file_pos = 0; * b->file_last = 0; * b->file = NULL; * b->shadow = NULL; * b->tag = 0; * and flags */b->pos=b->start;b->last=b->start;b->end=b->last+size;b->temporary=1;returnb;}
初始化各个字段 返回 缓冲区结构体 指针