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

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.lryc.cn/news/544802.html

相关文章:

  • 测试金蝶云的OpenAPI
  • C语言408考研先行课第一课:数据类型
  • 11天 -- Redis 中跳表的实现原理是什么?Redis 的 hash 是什么?Redis Zset 的实现原理是什么?
  • 单细胞分析(19)—— 单细胞转录组基因集评分方法
  • 010 rocketmq批量消息
  • JavaWeb后端基础(3)
  • Oracle数据库基础入门(三): DQL 深入解析与实践
  • P9231 [蓝桥杯 2023 省 A] 平方差
  • 贪心算法 求解思路
  • 2025/2/25,字节跳动后端开发一面面经
  • Buildroot 添加自定义模块-内置文件到文件系统
  • SpringBoot新闻推荐系统设计与实现
  • 领域驱动设计:事件溯源架构简介
  • 基于Java+Spring+Mybsita+mysql的汽租车辆共享平台的设计源码+设计文档
  • 深度学习的正则化深入探讨
  • Token相关设计
  • 【时序预测】在线学习:算法选择(从线性模型到深度学习解析)
  • React antd的datePicker自定义,封装成组件
  • 学生管理前端
  • 深入理解并实现自定义 unordered_map 和 unordered_set
  • 顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-大模型电话机器人
  • kinova机械臂绿色灯一闪一闪及刷机方法
  • 第16天:C++多线程完全指南 - 从基础到现代并发编程
  • 中科大计算机网络原理 1.5 Internt结构和ISP
  • Windows安装sql server2017
  • 计算机网络之传输层(tcp协议)
  • 从零到一:如何用阿里云百炼和火山引擎搭建专属 AI 助手(DeepSeek)?
  • Open3D解决SceneWidget加入布局中消失的问题
  • 计算机毕业设计Python+DeepSeek-R1大模型游戏推荐系统 Steam游戏推荐系统 游戏可视化 游戏数据分析(源码+文档+PPT+讲解)
  • Linux笔记---缓冲区