Ubuntu 下 nginx-1.24.0 源码分析 - ngx_open_file

打印 上一主题 下一主题

主题 875|帖子 875|积分 2625

ngx_open_file


定义在src/os/unix/ngx_files.h
  1. #define ngx_open_file(name, mode, create, access)                            \
  2.     open((const char *) name, mode|create, access)
复制代码

  1. #define NGX_FILE_RDONLY          O_RDONLY
  2. #define NGX_FILE_WRONLY          O_WRONLY
  3. #define NGX_FILE_RDWR            O_RDWR
  4. #define NGX_FILE_CREATE_OR_OPEN  O_CREAT
  5. #define NGX_FILE_OPEN            0
  6. #define NGX_FILE_TRUNCATE        (O_CREAT|O_TRUNC)
  7. #define NGX_FILE_APPEND          (O_WRONLY|O_APPEND)
  8. #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 中紧张用于处理非壅闭套接字,而非普通文件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天津储鑫盛钢材现货供应商

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表