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 中主要用于处理非阻塞套接字,而非普通文件。