`

nginx 源码学习笔记(十三)——文件读写和配置文件读取

 
阅读更多

对于c语言来说,如果需要支持多个操作系统,就需要封装一下文件的读写。封装文件的读写还有一个益处就是能够把读写异常,读写的内存控制,日志的记录封装起来,以便于其他的模块更好的应用。文件的读写一般会封装成打开文件,关闭打开的文件,读写文件。

在nginx的源码中,文件读写主要放在core/ngx_file.c,core/ngx_file.h,src/os/unix/ngx_files.h和src/os/unix/ngx_files.c中。由于nginx的文件读写函数较多,我们只是详细介绍比较重要,经常使用,实现很有技巧的函数。


我们首先介绍简单封装的函数,再介绍复杂封装的函数,简单封装的函数有如下函数:
ngx_open_file/ngx_close_file


这里可以看到单纯的对c语言的open和close进行了封装,是不是非常简单呢?


ngx_delete_file删除文件函数,调用系统的unlink函数,unlink()会删除pathname指定的文件。如果该文件名最后连接点,但有其他进程打开了此文件,则在所有关于此文件的文件描述词皆关闭后才会删除。如果参数pathname为一符号连接(symboliclink),则此连接会被删除。

在ngx_files.c文件中存在大量的文件读写操作,这里就不一一讲解;

配置文件一般有三个作用:

根据配置文件启用某段程序,

用配置文件传入参数,

设定启动程序程序之间的相互关系。

Nginx的配置文件也实现了这三部分的功能,nginx的配置文件主要有以下几个主要的结构体和函数配置文件的结构体有:

结构体说明
ngx_command_s 定义了配置文件中的 tag的配置,以及遇到该tag该怎么处理的函数
ngx_open_file_s 定义了打开文件的参数的结构体
ngx_conf_file_t 定义了缓存配置文件的数据的结构体
ngx_conf_s 定义了配置文件解析过程中需要缓存的数据

ngx_command_s这个结构体定义了配置文件中的tag,以及遇到该tag,该怎么处理,其结构如下表:

结构体说明
name 配置文件中的
tag
Type
配置类型,这个参数中会定义这个配置是什么范围内的配置(核心配置或是普通配置),以及有多少参数, 是块配置,还是行配置
Set 解析该配置的函数
ConfOffset 指定配置存储的位置
Post 指向模块在读配置的时候需要的一些零碎变量。一般它是NULL

在每一个ngx_command_s数组的结尾必须有一个ngx_null_command,以用于判断是否结束。
配置文件解析的入口为ngx_conf_parse,如果了解了ngx_conf_parse,对nginx的配置文件的原理就有了基本的了解,下面我们详细的解释一下



ngx_conf_parse函数除了在ngx_init_cycle函数中调用外,在配置块的解析中,即cmd->set函数(例如解析http配置块的ngx_http_block函数)中也会调用该函数,从某种程度上理解该函数其实是一个递归函数,只不过中间调用了其他函数。在讲解http的配置文件那一章我们会根据http的配置例子详细的讲解。

分享到:
评论

相关推荐

    《nginx源码学习笔记》.pdf

    《nginx源码学习笔记》.pdf

    Nginx 源码分析笔记

    本笔记将深入探讨Nginx的内存管理、数组操作、队列和哈希表等核心概念。 首先,我们来看Nginx的内存管理。Nginx使用内存池(Memory Pool)来高效地分配和管理内存。内存池是一种一次性分配大量内存,然后在内部进行...

    nginx源码学习资料

    学习Nginx源码有助于深入理解其工作原理,提高在实际应用中的问题排查和性能优化能力。本资料包包含了《Nginx模块开发指南》和《深入理解Nginx》等资源,旨在帮助初学者逐步探索Nginx的设计思想和内部机制。 **1. ...

    nginx.service——nginx开机自启动配置文件[CentOS 7.6 64位]

    nginx开机自启动配置文件,在[CentOS 7.6 64位]系统下运行正常。 编译安装nginx后,将该配置文件放在服务器的/usr/lib/systemd/system/目录下,然后启动nginx服务。

    nginx学习笔记.zip

    本学习笔记将深入探讨Nginx的核心概念、安装与配置、反向代理、负载均衡、缓存管理以及日志记录等多个方面,旨在帮助读者全面掌握Nginx的使用技巧。 **一、Nginx核心概念** 1. **事件模型**:Nginx采用异步非阻塞...

    Windows平台,Nginx配置文件修改自动加载重启

    传统的做法是在命令行中运行`nginx -s reload`,通知Nginx进程重新读取配置文件,但这种方法需要手动操作。 为了实现配置文件修改后的自动加载重启,我们可以利用`nginx-conf-watcher`工具。这是一个监听配置文件...

    Nginx完整学习笔记.doc

    Nginx完整学习笔记 Nginx 是一个功能强大、灵活、可扩展的 Web 服务器,以下是关于 Nginx 的详细知识点: 安装与部署 Nginx 依赖于 pcre 库,因此在安装 Nginx 之前需要先安装 pcre 库。使用 yum 安装 pcre 和 ...

    nginx学习笔记(软件+学习笔记)

    nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) ...

    Nginx学习笔记.zip

    安装Nginx涉及下载源码、编译配置和启动服务等步骤,在Linux系统中,常用的是通过包管理器如apt或yum来安装,而在Windows环境中则可直接下载二进制文件。 第二节课可能会深入到Nginx的配置文件结构和配置指令。...

    notepad++编辑nginx配置文件支持高亮

    在标题“notepad++编辑nginx配置文件支持高亮”中,我们关注的是如何在Notepad++中实现对Nginx配置文件的语法高亮显示,这将极大提升开发者的阅读和编写效率。 Nginx是一款高性能的HTTP和反向代理服务器,其配置...

    Nginx文件上传模块配置

    在本文中,我们将深入探讨如何配置Nginx以支持文件上传功能,特别是使用upload_module和upload_progress_module这两个第三方模块。Nginx是一个高效且灵活的HTTP服务器和反向代理,由Igor Sysoev开发,它支持模块化的...

    nginx项目源码学习及笔记.zip

    nginx项目源码学习及笔记.zip

    centos8 nginx1.20.1 与nginx配置文件

    安装完成后,创建Nginx的启动和服务文件: ```bash sudo cp -r /usr/local/nginx/conf /etc/nginx/ sudo nano /etc/systemd/system/nginx.service ``` 在`nginx.service`文件中,添加如下内容,确保路径和指令正确:...

    nginx搭建文件服务器上传文件获取文件

    #### 三、配置 Nginx **1. 修改 `nginx.conf` 文件** 打开 Nginx 的配置文件,通常位于 `/usr/local/openresty/nginx/conf/nginx.conf`。 - **用户**:定义运行 Nginx 进程的用户。 - **工作进程数量**:设置...

    Nginx 配置文件 nginx.conf 详解

    Nginx 配置文件 nginx.conf 是 Nginx 服务器的核心配置文件,它控制着 Nginx 服务器的行为和性能。在这个配置文件中,我们可以设置服务器的用户和组、工作进程数、错误日志、进程标识符、文件描述符最大值、事件处理...

    1.0版本的nginx源码

    2. **配置解析**:理解 Nginx 如何读取和解析配置文件,了解配置指令的处理过程。 3. **事件处理**:深入研究事件模型,了解Nginx如何处理网络事件。 4. **请求处理**:分析从接收到请求到返回响应的整个流程,...

    Nginx配置文件——一级域名、二级域名

    本文将深入探讨如何通过Nginx配置文件来设置一级域名和二级域名,以及如何利用Nginx的反向代理功能。 首先,了解一级域名和二级域名的概念至关重要。一级域名是互联网上顶级的域名,如.com、.org、.net等。二级域名...

    nginx源码 1.18版

    Nginx是一款高性能的HTTP和反向代理服务器,也是一...通过深入学习和分析Nginx源码,开发者可以提升自己的网络编程能力,更好地理解和解决实际问题,如性能瓶颈、安全漏洞等,同时为自定义开发Nginx模块打下坚实基础。

    nginx源码windows版

    **Nginx源码在Windows下的编译与运行** Nginx是一款高性能的Web服务器和反向代理服务器,因其轻量级、高并发处理能力而备受赞誉。...对于初次尝试源码编译的用户来说,这可能是一个学习和探索的过程。

    Nginx配置文件原始版本

    Nginx配置文件原始版本,这是刚下来的Nginx服务器最原始的版本内容,下载覆盖即可。

Global site tag (gtag.js) - Google Analytics