Ubuntu 下 nginx-1.24.0 源码分析 - ngx_open_file

server/2025/3/4 13:52:59/

ngx_open_file


定义src/os/unix/ngx_files.h

#define ngx_open_file(name, mode, create, access)                            \open((const char *) name, mode|create, access)

#define NGX_FILE_RDONLY          O_RDONLY
#define NGX_FILE_WRONLY          O_WRONLY
#define NGX_FILE_RDWR            O_RDWR
#define NGX_FILE_CREATE_OR_OPEN  O_CREAT
#define NGX_FILE_OPEN            0
#define NGX_FILE_TRUNCATE        (O_CREAT|O_TRUNC)
#define NGX_FILE_APPEND          (O_WRONLY|O_APPEND)
#define NGX_FILE_NONBLOCK        O_NONBLOCK

1. #define NGX_FILE_RDONLY O_RDONLY
  • 作用:定义只读模式标志。
  • 映射:直接对应 Unix/Linux 的 O_RDONLY(值为 0)。
  • 用途
    用于以只读方式打开文件(如配置文件、静态资源文件)。

2. #define NGX_FILE_WRONLY O_WRONLY
  • 作用:定义写入模式标志。
  • 映射:对应 O_WRONLY(值为 1)。
  • 用途
    用于以只写方式打开文件(如日志文件、临时文件)。
  • 注意
    若文件不存在,需配合 NGX_FILE_CREATE_OR_OPEN 使用。

3. #define NGX_FILE_RDWR O_RDWR
  • 作用:定义读写模式标志。
  • 映射:对应 O_RDWR(值为 2)。
  • 用途
    需要同时读写文件时使用

4. #define NGX_FILE_CREATE_OR_OPEN O_CREAT
  • 作用:定义文件创建标志。
  • 映射:对应 O_CREAT(值为 0x40)。
  • 用途
    若文件不存在,则创建新文件;若存在,直接打开。
  • 权限
    需配合 access 参数指定权限(如 0644)。

5. #define NGX_FILE_OPEN 0

  • 作用:定义“仅打开”标志(不创建文件)。
  • 映射:值为 0,表示不添加任何额外标志。
  • 用途
    确保仅打开已存在的文件,避免意外创建新文件(如配置文件)。
  • 场景
    在解析主配置文件时使用,防止因路径错误创建无效文件。

6. #define NGX_FILE_TRUNCATE (O_CREAT|O_TRUNC)

  • 作用:定义截断模式标志。
  • 映射:组合 O_CREAT(创建)和 O_TRUNC(截断)。
  • 用途
    • 若文件存在,将其长度截断为 0(清空内容)。
    • 若文件不存在,创建新文件。

7. #define NGX_FILE_APPEND (O_WRONLY|O_APPEND)

  • 作用:定义追加模式标志。
  • 映射:组合 O_WRONLY(写入)和 O_APPEND(追加)。
  • 用途
    每次写入操作均追加到文件末尾,避免覆盖已有内容。

8. #define NGX_FILE_NONBLOCK O_NONBLOCK

  • 作用:定义非阻塞模式标志。
  • 映射:对应 O_NONBLOCK(值为 0x800)。
  • 用途
    使文件操作立即返回,避免阻塞(如异步 I/O 或设备文件操作)。
  • 注意
    在 Nginx 中主要用于处理非阻塞套接字,而非普通文件。

http://www.ppmy.cn/server/172348.html

相关文章

01. HarmonyOS应用开发实践与技术解析

文章目录 前言项目概述HarmonyOS应用架构项目结构Ability生命周期 ArkTS语言特性装饰器状态管理 UI组件与布局基础组件响应式布局样式与主题 页面路由与参数传递页面跳转参数接收 数据绑定与循环渲染数据接口定义循环渲染 条件渲染组件生命周期最佳实践与性能优化组件复用响应式…

GPT-4.5

OpenAI 正式发布 GPT-4.5——迄今为止最强大的 AI 模型的研究预览版。从今天起,它向Pro 用户和开发者开放,引发了全球 AI 爱好者的热烈讨论。 OpenAI 团队表示,GPT-4.5 是他们迄今为止最大、最强的模型,在预训练和后训练方面实现…

基于MLLMs的3D医学图像分析(Python代码实现+数据可视化分析)

摘要 医学图像分析对临床诊断和治疗至关重要,而多模态大语言模型(MLLMs)的应用日益广泛。然而,先前研究主要集中于2D医学图像,尽管3D图像蕴含更丰富的空间信息,但其分析仍处于探索不足的领域。本文旨在推动…

spark 虚拟机基本命令(2)

cp 命令,复制 格式:cp 源文件 目标文件 cp -r 命令 复制目录 格式:cp -r 源文件 目标文件夹 mv 命令,重命名和移动 格式:mv 源文件 目标文件 说明:若源文件和目标文件在同一个目录下,就是重命…

在openshift上部署Gitlab

1.在OperatorHub搜索GitLab 点击install Update approval 改为 Manual 2.Create GitLab kind: GitLab apiVersion: apps.gitlab.com/v1beta1 metadata:name: gitlabnamespace: gitlab-system spec:chart:values:certmanager:install: falseglobal:hosts:domain: example.com…

基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍爬虫数据概览HIve表设计Cars Database Tables 1. cars_data2. annual_sales_volume3. brand_sales_volume4. city_sales_volume5. sales_volume_by_year_and_brand6. sales_distri…

【tplink】校园网接路由器如何单独登录自己的账号,wan-lan和lan-lan区别

老式路由器TPLINK,接入校园网后一人登录,所有人都能通过连接此路由器上网,无法解决遂上网搜索,无果,幸而偶然看到一个帖子说要把信号源网线接入路由器lan口,开启新世界。 一、wan-lan,lan-lan区…

在 Ubuntu 系统 22.04 上安装 Docker

在 Ubuntu 系统 22.04 上安装 Docker 在 Ubuntu 系统 22.04 上安装 Docker1. 更新系统包2. 安装依赖工具3. 添加 Docker 官方 GPG 密钥4. 添加 Docker 的 APT 仓库5. 安装 Docker Engine6. 启动并设置 Docker 服务7. 验证安装8. 配置非 Root 用户权限(可选&#xf…