2025年ifstream的头文件(if_nametoindex头文件)

ifstream的头文件(if_nametoindex头文件)目录 一 数据结构 1 ngx cycle t 的数据结构 2 ngx core conf t 的数据结构 二 初始化过程 1 创建一个内存池 2 拷贝配置文件的路径前缀 usr local nginx 3 Nginx 的路径前缀拷贝 4 拷贝配置文件信息 5 拷贝配置参数信息 6 路径信息初始化 7 初始化打开的文件句柄 8 初始化 shared memory 链表 9 初始化 listening 数组 10 模块创建和核心配置结构初始化 ngx core conf t




目录

一、数据结构

1. ngx_cycle_t的数据结构

2. ngx_core_conf_t的数据结构

二、初始化过程

1. 创建一个内存池。

2. 拷贝配置文件的路径前缀(/usr/local/nginx)

3. Nginx的路径前缀拷贝

4. 拷贝配置文件信息

5. 拷贝配置参数信息

6. 路径信息初始化

7. 初始化打开的文件句柄

8. 初始化shared_memory链表

9. 初始化listening数组

10. 模块创建和核心配置结构初始化ngx_core_conf_t

11. 配置文件nginx.conf解析

12. 创建PID文件

13. 遍历cycle->open_files链表中的文件,并且打开

14. 创建共享内存并初始化

15. 处理listening数组,并开始监听socket

16. 关闭或删除残留在old_cycle中的资源

Nginx的大部分初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)展开。本文主要讲解cycle的数据结构以及初始化过程中干了什么事情。

cycle的初始化过程在/src/core/cycle.c文件中。

在使用gdb调试nginx源码时,需要设置启动变量

nginx bianliang_初始化

set args -c /usr/local/nginx/conf/nginx.conf

nginx bianliang_nginx_02

在上图中完成了配置文件

nginx bianliang_初始化_03

一、数据结构
1. ngx_cycle_t的数据结构
cycle是Nginx贯穿全局的一个全局变量。阅读Nginx的源码必须得先搞清楚cycle全局变量的初始化过程。

nginx bianliang_配置文件_04

全局变量指针指向该结构体,并使用volatile修饰

nginx bianliang_初始化_05

保存启动时的环境变量

nginx bianliang_初始化_06

nginx bianliang_配置文件_07

给nginx的模块编号,仅仅是编号

nginx bianliang_配置文件_08

nginx bianliang_nginx bianliang_09

nginx bianliang_配置文件_10

nginx bianliang_配置文件_11

将模块编号和名字转移到cycle->modules数组中

nginx bianliang_配置文件_12


nginx bianliang_nginx bianliang_13

可以看出0和1是NGX_CORE_MODULE 模块,会执行相应的create_conf函数

nginx bianliang_nginx bianliang_14


nginx bianliang_nginx_15

nginx bianliang_nginx bianliang_16

会执行上面的ngx_core_module_create_conf函数,将从内存中分配 并存储到

nginx bianliang_初始化_17

nginx bianliang_nginx bianliang_18

nginx bianliang_初始化_19

nginx bianliang_nginx_20

nginx bianliang_初始化_21

至此完成了 配置文件中 worker_processes 解析以及赋值操作

2. ngx_core_conf_t的数据结构


ngx_code_conf_t的数据结构主要用于装在Nginx的nginx.conf的核心配置文件的参数。后面我们会具体讲解配置文件nginx.conf的解析过程以及和模块。


1. 创建一个内存池。


后续所有的内存都会被分配到这个内存池上面。

2. 拷贝配置文件的路径前缀(/usr/local/nginx)


主要拷贝到 cycle->conf_prefix

3. Nginx的路径前缀拷贝


拷贝到cycle->prefix

4. 拷贝配置文件信息


/nginx/conf/nginx.conf 文件路径

5. 拷贝配置参数信息

6. 路径信息初始化

7. 初始化打开的文件句柄

8. 初始化shared_memory链表

9. 初始化listening数组

10. 模块创建和核心配置结构初始化ngx_core_conf_t


  • 主要初始化cycle->modules
  • 创建核心配置结构,Nginx的核心配置会放到ngx_core_conf_t *ccf数据结构上
  • 初始化核心配置结构ngx_core_conf_t *

11. 配置文件nginx.conf解析


配置文件解析会在下章中详细解读。

12. 创建PID文件


Nginx将PID写入文件内,/usr/local/nginx-1.4.7/nginx.pid,后续对Nginx进行重启、停止、信号操作就可以使用这个PID了。

13. 遍历cycle->open_files链表中的文件,并且打开


cycle->open_file主要是在ngx_conf_open_file这个方法里面放入文件路径,然后下面去打开文件。

主要是日志文件和配置文件。

14. 创建共享内存并初始化


新旧shared_memory链表的比较,相同的共享内存保留,旧的不同的共享内存被释放,新的被创建

15. 处理listening数组,并开始监听socket

16. 关闭或删除残留在old_cycle中的资源


  • 释放多余的共享内存;
  • 关闭多余的侦听sockets;
  • 关闭多余的打开文件


编程小号
上一篇 2025-03-19 18:27
下一篇 2025-04-12 22:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/34661.html