本节我们讲述一下nginx中对所涉及到的文件操作的封装。
1. ngx_file_s数据结构
ngx_file_s数据结构是对打开的文件的一个封装:
-
fd
: 所打开文件对应的句柄
-
name
: 所打开文件的名称
-
info
: 所打开文件所对应的struct stat信息
-
offset
: 当前要操作的文件指针偏移
-
sys_offset
: 当前该打开文件的实际指针偏移
-
log
: 该打开文件所对应的log
-
thread_handler/thread_ctx/thread_task
: 当前我们并不支持多线程操作文件,这里暂不介绍
-
aio
: 这里我们暂不支持NGX_HAVE_FILE_AIO
-
valid_info
: 本字段暂时未能用到
-
directio
: 对于当前文件是否使用directio
2. ngx_path_t相关数据结构
ngx_path_t
是一个目录对象结构:
上图是nginx创建的临时文件结构。nginx在根目录下最多创建3层目录结构。例如:
/home/nginx/tmpfile/9/32/198
其中home/nginx/tmpfile
为根目录,
9/32/198
``则为3层子目录结构。
ngx_path_t
是用于初始时候的一个路径。
3. ngx_temp_file_t数据结构
ngx_temp_file_t
代表一个临时文件结构。
4. ngx_ext_rename_file_t数据结构
重命名文件所对应相关数据结构
5. ngx_copy_file_t数据结构
6. ngx_tree_ctx_s数据结构
这里是nginx遍历目录的相关数据结构,下面我们简要介绍一下其中的各个字段:
-
size
: 遍历到的文件的大小
-
fs_size
: 指的是遍历到的文件所占磁盘块数目乘以512的值与size
中的最大值,即fs_size = ngx_max(size,st_blocks*512)
-
access
: 指的是遍历到的文件的访问权限
-
mtime
: 指的是遍历到的文件上次被修改的时间
-
init_handler
: 与下面的data
、alloc
字段相关,用于初始化遍历过程中的相关数据结构。一般如果alloc
字段不为0的话,表示要分配alloc大小的空间,此时会调用init_handler回调函数初始化。
-
file_handler
: 处理普通文件的回调函数
-
pre_tree_handler
: 进入一个目录前的回调函数
-
post_tree_handler
: 离开一个目录后的回调函数
-
spec_handler
: 处理特殊文件的回调函数,比如socket、FIFO等
-
data
: 传递一些数据结构,可以在不同的目录下使用相同的数据结构,或者也可以重新分配,前提是alloc不为0
-
alloc
: 如果需要分配一些数据结构,这里指定分配数据结构的大小,并由init_handler
进行初始化
-
log
: 主要用于日志的记录
7. 相关函数声明
8. 相关变量声明
[参考]
-
nginx文件结构
-
Nginx中目录树的遍历