本节我们讲述一下nginx中对所涉及到的文件操作。
1. 相关变量定义
-
函数ngx_test_full_name()
用于判断name
是否为一个绝对路径。
-
变量temp_number
作为一个临时的占位符空间
-
变量ngx_temp_number
刚开始指向temp_number
,而后在初始化event模块时(ngx_event_module_init()函数),指向一个共享内存空间,在整个Nginx中作为一个临时值使用
-
变量ngx_random_number作为随机值使用,默认初始化值为123456,而在event模块初始化时,被设置为:
2. 函数ngx_get_full_name()
这里先判断name
是否是一个绝对路径,如果是则直接返回OK;否则开辟一块空间,将name
追加到prefix
后(注意,这里会以’\0’结尾)
3. 函数ngx_test_full_name()
在WIN32上判断是否是一个绝对路径,例如C:
,又或者是以类似于<charactor>/
这样开头的路径; 对于在其他操作系统环境上则直接判断是否为绝对路径。在当前环境下,我们并不支持NGX_WIN32
宏定义。
4. 函数ngx_write_chain_to_temp_file()
这里首先判断tf->file.fd
是否为一个有效的文件句柄,如果不是则先创建一个临时文件。接着将chain
中的数据写入到tf
临时文件中。
5. 函数ngx_create_temp_file()
本函数用于创建一个临时文件,具体创建步骤如下:
file->name.len = path->name.len + 1 + path->len + 10;
这里path->len为文件的多级目录结构长度,之所以要再加10,是因为创建临时文件会加一个随机值到文件名后(uint32_t所表示的数最大长度为10个字节)
这里首先将产生的整数n
格式化为宽度为10的字符串,以'\0'
结尾,到目前为止,file->name
为如下:
然后创建hash文件名,最后再创建临时文件。
6. 函数ngx_create_hashed_filename()
这里首先在path->name.len+path->len
为止处添加’/’字符,然后分别产生每一级的Hash路径。
7. 函数ngx_create_path()
这里分别创建path中的每一级路径。
8. 函数ngx_create_full_path()
这里以’/’作为分界符,分别创建每一级路径。
9. 函数ngx_next_temp_number()
这里根据collision的条件,每次对ngx_temp_number
增加一个值,然后返回.
[参考]
-
nginx文件结构
-
Nginx中目录树的遍历