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

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_open_file

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.kler.cn/a/567442.html

相关文章:

  • 性能测试监控工具jmeter+grafana
  • ave-form.vue 组件中 如何将产品名称发送给后端 ?
  • Unity插件-Mirror使用方法(二)组件介绍
  • 【学术会议论文投稿】Spring Boot实战:零基础打造你的Web应用新纪元
  • C++之 “” 用法(总结)
  • 【Oracle脚本】消耗CPU高的SQL抓取
  • JavaPro _JVM 知识点速记 JVM大全
  • 【AVL树】—— 我与C++的不解之缘(二十三)
  • GitCode 助力 python-office:开启 Python 自动化办公新生态
  • 机器学习的通用工作流程
  • 若依框架修改为多租户
  • OptiTrack光学跟踪系统:引领工厂机器人应用的革新浪潮
  • 克隆项目到本地
  • C++(Qt)软件调试---Linux 性能分析器perf(29)
  • lua学习(二)
  • Compose笔记(七)--Modifier
  • rustup-init.exe 安装缓慢的解决办法
  • CSS浮动详解
  • [密码学实战]Java实现SM2数字信封(结合SM4对称加密)生成与解析
  • 前后端常用正则