Nginx源代码解析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档