当前位置: 首页 > news >正文

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_prefixprefix),然后调用 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博客

相关文章:

  • 达梦:用户和模式
  • Pytorch的F.cross_entropy交叉熵函数
  • vue中json-server及mockjs后端接口模拟
  • 第4章 信息系统架构(二)
  • 【Linux专栏】find命令+同步 实验
  • 机器学习(1)安装Pytorch
  • C#项目05-猜数字多线程
  • kotlin Java 使用ArrayList.add() ,set()前面所有值被 覆盖 的问题
  • 运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
  • STM32 HAL库USART串口中断编程:环形缓冲区防止数据丢失
  • AI IDE - Trae -学习与实践
  • 简单认识一下-Redis
  • 揭秘区块链隐私黑科技:零知识证明如何改变未来
  • springboot024-玩具租赁系统
  • nushell排查磁盘空间使用情况
  • FFmpeg 基本语法全面介绍
  • 利用pico4ultra提高生产力与学习效率的可行性方案
  • electron下载文件,弹窗选择下载路径,并通知下载进度
  • 初识MyBatis
  • Java IO
  • 中国物流集团等10家央企11名领导人员职务任免
  • 习近平在第三十五个全国助残日到来之际作出重要指示
  • 美国将与阿联酋合作建立海外最大的人工智能数据中心
  • 郑钦文憾负高芙,止步WTA1000罗马站四强
  • 远洋集团:今年前4个月销售80.9亿元,同比增加13.62%
  • 丹麦外交大臣拉斯穆森将访华