- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Nginx源代码解析
Nginx源代码解析
Nginx代码的目录和结构
nginx的源码目录结构层次明确,从自动编译脚本到各级的源码,层次都很清晰,是一个大型服务端软件构建的一个范例。以下是源码目录结构说明:
├─auto 自动编译安装相关目录
│ ├─cc 针对各种编译器进行相应的编译配置目录,包括Gcc、Ccc等
│ ├─lib 程序依赖的各种库,包括md5,openssl,pcre等
│ ├─os 针对不同操作系统所做的编译配置目录
│ └─types
├─conf 相关配置文件等目录,包括nginx的配置文件、fcgi相关的配置等
├─contrib
├─html index.html
└─src 源码目录
├─core 核心源码目录,包括定义常用数据结构、体系结构实现等
├─event 封装的事件系统源码目录
├─http http服务器实现目录
├─mail 邮件代码服务器实现目录
├─misc 该目录当前版本只包含google perftools包
└─os nginx对各操作系统下的函数进行封装以及实现核心调用的目录。
基本数据结构
简单的数据类型
在 core/ngx_config.h 目录里面定义了基本的数据类型的映射,大部分都映射到c语言自身的数据类型。
typedef intptr_t ? ? ? ?ngx_int_t;
typedef uintptr_t ? ? ? ngx_uint_t;
typedef intptr_t ? ? ? ?ngx_flag_t;
其中ngx_int_t,nginx_flag_t,都映射为intptr_t; ngx_uint_t映射为uintptr_t。
这两个类型在/usr/include/stdint.h的定义为:
/* Types for `void * pointers. ?*/
#if __WORDSIZE == 64
# ifndef __intptr_t_defined
typedef long int ? ? ? ? ? ? ? ?intptr_t;
# ?define __intptr_t_defined
# endif
typedef unsigned long int ? ? ? uintptr_t;
#else
# ifndef __intptr_t_defined
typedef int ? ? ? ? ? ? ? ? ? ? intptr_t;
# ?define __intptr_t_defined
# endif
typedef unsigned int ? ? ? ? ? ?uintptr_t;
#endif
所以基本的操作和整形/指针类型的操作类似。
字符串的数据类型
nginx对c语言的字符串类型进行了简单的封装,?core/ngx_string.h/c?里面包含这些封装的内容。
其中定义了ngx_str_t,ngx_keyval_t, ngx_variable_value_t这几个基础类型的定义如下:
typedef struct {
? ? size_t ? ? ?len;
? ? u_char ? ? *data;
} ngx_str_t;
typedef struct {
? ? ngx_str_t ? key;
? ? ngx_str_t ? value;
} ngx_keyval_t;
typedef struct {
? ? unsigned ? ?len:28;
? ? unsigned ? ?valid:1;
? ? unsigned ? ?no_cacheable:1;
? ? unsigned ? ?not_found:1;
? ? unsigned ? ?escape:1;
? ? u_char ? ? *data;
} ngx_variable_value_t;
可以看出 ngx_str_t 在原有的uchar*?的基础上加入的字符串长度的附加信息, 初始化使用ngx_string宏进行,他的定义为:
#define ngx_string(str) ? ? { sizeof(str) - 1, (u_char *) str }
内存分配相关
系统功能封装
内存相关的操作主要在 os/unix/ngx_alloc.{h,c} 和 core/ngx_palloc.{h,c} 下。
其中 os/unix/ngx_alloc.{h,c} 封装了最基本的内存分配函数,是对c原有的malloc/free/memalign 等原有的函数的封装,对应的函数为:
ngx_alloc 使用malloc分配内存空间
ngx_calloc 使用malloc分配内存空间,并且将空间内容初始化为0
ngx_memalign 返回基于一个指定的alignmen
您可能关注的文档
最近下载
- 2025年统编版专题09 古诗文鉴赏 三升四语文暑假专项提升试题.docx
- (高清版)DB4401∕T 43-2020 《反恐怖防范管理 防冲撞设施》.pdf VIP
- 现代数值计算(第3版)课后习题答案解析.docx VIP
- 如何规范术前皮肤准备(1).PPTX VIP
- 06SG517-2 轻型屋面三角形钢屋架(部分T型钢).docx VIP
- Unit 5 What a Delicious Meal! 单词(背诵版+默写版) 2025新人教版英语八年级上册 .pdf VIP
- ISO 16750-3-2023中文-道路车辆- 第3部分:机械负荷.pdf
- 理解人性—电子书.docx VIP
- 安全操作规程评审与修订记录.doc VIP
- 数据中心柴油发电机组带载测试实施方案探索.docx VIP
原创力文档


文档评论(0)