Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_full_name 函数
ngx_conf_full_name
声明在 src/core/ngx_conf_file.h
ngx_int_t ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name, ngx_uint_t conf_prefix);
定义在 src\core\ngx_conf_file.c
ngx_int_t ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name, ngx_uint_t conf_prefix) { ngx_str_t *prefix; prefix = conf_prefix ? &cycle->conf_prefix : &cycle->prefix; return ngx_get_full_name(cycle->pool, prefix, name); }
详解
ngx_int_t ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name, ngx_uint_t conf_prefix)函数定义与作用
参数说明:
cycle: 指向ngx_cycle_t结构体的指针,表示当前 Nginx 运行周期的核心数据结构。它包含了 Nginx 的全局配置信息。
name: 指向ngx_str_t类型的字符串,表示需要处理的路径名称(通常是相对路径)。
conf_prefix: 布尔值标志,用于决定使用cycle->conf_prefix(配置文件路径前缀)还是cycle->prefix(安装路径前缀)作为基础路径。返回值:
- 返回类型为
ngx_int_t,表示函数执行结果。成功时返回NGX_OK,失败时返回NGX_ERROR。功能概述:
该函数的主要作用是将相对路径转换为绝对路径。
具体来说,它根据
conf_prefix参数选择合适的基础路径(conf_prefix或prefix),然后调用ngx_get_full_name函数完成路径拼接。
ngx_str_t *prefix;变量声明
- 定义了一个指向
ngx_str_t类型的指针变量prefix。
ngx_str_t是 Nginx 中常用的字符串结构体,包含两个字段:
data: 指向字符串内容的指针。
len: 字符串的长度。- 这里的
prefix将用于存储选定的基础路径。
prefix = conf_prefix ? &cycle->conf_prefix : &cycle->prefix;选择基础路径
- 使用三元运算符判断
conf_prefix的值:
- 如果
conf_prefix为真(非零),则选择cycle->conf_prefix。- 如果
conf_prefix为假(零),则选择cycle->prefix。
cycle->conf_prefix通常表示配置文件所在的目录路径。
cycle->prefix通常表示 Nginx 的安装目录路径。- 根据
conf_prefix的值动态选择不同的基础路径,使得路径处理更加灵活。
return ngx_get_full_name(cycle->pool, prefix, name);调用路径拼接函数
- 调用
ngx_get_full_name函数完成路径拼接,并直接返回其结果。- 参数说明 :
cycle->pool: 内存池指针,用于分配内存。
prefix: 基础路径(由上一步选择)。
name: 需要处理的相对路径。
ngx_get_full_name是 Nginx 提供的一个通用函数,用于将相对路径与基础路径拼接成完整的绝对路径。Ubuntu 下 nginx-1.24.0 源码分析 - ngx_get_full_name 函数-CSDN博客
