nginx 基本数据结构

1. nginx 代码目录结构
在src目录下有如下几个目录:
core  event  http  mail  misc  os
各子目录存放不同类型的代码,其中:
  • core : 该目录存放core module的代码,也是nginx服务的入口
  • http : http core module 的代码,nginx作为web/http proxy server运行时的核心模块
  • mail : mail core module 的代码,nginx作为pop3/imap/smtp proxy server运行时的核心模块 ( 不在我们本次研究范围内 )
  • event : nginx 自身对事件处理逻辑的封装
  • os : nginx对各个平台抽象逻辑的封装
  • misc : nginx 的一些utils,定义了test和profiler的一些外围模块的逻辑
2. 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

所以基本的操作和整形/指针类型的操作类似

3. nginx字符串的数据类型的表示

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 }

关于字符串数据类型详见Nginx 基本数据结构 string

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值