简单的数据类型

在core/ngx_confing.h中定义了基本的数据类型的映射,大部分都映射到c语言自身的数据类型:

typedef intptr_t        ngx_int_t;

typedef uintptr_t       ngx_uint_t;

typedef intptr_t        ngx_flag_t;

其中ngx_int_t,ngx_flag_t都映射为intptr_t;ngx_uint_t映射为uintptr_t。

这两个类型在/usr/include/stdint.h的定义为:

  1. /* Types for `void *' pointers.  */
  2. #if __WORDSIZE == 64
  3. # ifndef __intptr_t_defined
  4. typedef long int                intptr_t;
  5. #  define __intptr_t_defined
  6. # endif
  7. typedef unsigned long int       uintptr_t;
  8. #else
  9. # ifndef __intptr_t_defined
  10. typedef int                     intptr_t;
  11. #  define __intptr_t_defined
  12. # endif
  13. typedef unsigned int            uintptr_t;
  14. #endif

看到这里大家应该理解,基本操作应该都是一样的。

字符串的数据类型

nginx对c语言字符串类型进行了简单的封装,core/ngx_string.h/c里面包含了这些封装的内容。其中定义了

ngx_str_t,

ngx_keyval_t,

ngx_variable_value_t

这几个基础类型:

  1. typedef struct {
  2. size_t      len;
  3. u_char     *data;
  4. } ngx_str_t;
  5. typedef struct {
  6. ngx_str_t   key;
  7. ngx_str_t   value;
  8. } ngx_keyval_t;
  9. typedef struct {
  10. unsigned    len:28;
  11. unsigned    valid:1;
  12. unsigned    no_cacheable:1;
  13. unsigned    not_found:1;
  14. unsigned    escape:1;
  15. u_char     *data;
  16. } ngx_variable_value_t;

ngx_str_t 包含两个属性:len即长度, data为数据;初始化使用ngx_string宏进行:

#define ngx_string(str)     {sizeof(str) -1,(u_chart*)str }

该模块在ngx_string.h和ngx_string.c中。字符串的操作一般包括:初始化,复制,格式化输出,大小写转换,查找子字符,查找子字符串,字符串转换成数字,字符串编码类型相关函数,字符串比较,trim,split等函数。在这个类中间没有调用其他模块的函数,作为一个http服务器,还需要实现URL转换,简单的html转换等函数。字符串的结构体非常简单实用,是非常值得刚入门的linux开发工程师学习的。

函数                                                                                       说明
ngx_string                                                                                        初始化函数
ngx_null_string                                                                                初始化空字符串函数
ngx_tolower                                                                                     字符转小写函数
ngx_toupper                                                                                     字符转大写函数
ngx_strncmp                                                                                    比较指定长度的字符串是否相同
ngx_strcmp                                                                                      比较字符串是否相同
ngx_strstr                                                                                         从字符串中找到需要的字符串
ngx_strlen                                                                                         字符串的长度
ngx_strchr                                                                                        在字符串中找到匹配的字符,返回 0为匹配
ngx_strlchr                                                                                      在字符串中找到匹配的字符,返回匹配的指针
ngx_memzero                                                                                  把一片内存区设置为0
ngx_memset                                                                                     把一片内存区设置为指定的数
ngx_memcpy                                                                                   复制内存,没有返回
ngx_cpymem                                                                                   复制内存,返回复制完了dst的最后一个字符的下一个字符的指针
ngx_copy                                                                                         同ngx_cpymem
ngx_memcmp                                                                                  比较内存中的数据是否相同
ngx_strlow                                                                                       把字符串都转换成小写
ngx_cpystrn                                                                                     复制字符串,并且返回字符串的最后一个字符的下一个字符的指针
ngx_pstrdup                                                                                     复制字符串到pool,返回字符串的指针
ngx_sprintf                                                                                       把各种类型的数据格式化输出到buf,最大的长度为65536
ngx_snprintf                                                                                     把各种类型的数据格式化输出到指定长度的buf
ngx_strcasecmp                                                                                不分大小写比较两个字符串是否相同
ngx_strncasecmp                                                                             指定长短不分大小写比较两个字符串是否相同
ngx_strnstr                                                                                       在指定大小一个字符串中是否有子字符串
ngx_strstrn                                                                                       在一个字符串中是否有子指定大小的字符串
ngx_strcasestrn                                                                                在一个字符串中是否有子指定大小的字符串,不区分大小写
ngx_rstrncmp                                                                                   从后往前比较两个字符串是否相同,返回相同的位置
ngx_rstrncasecmp                                                                            从后往前比较两个字符串是否相同,返回相同的位置,不区分大小写
ngx_memn2cmp                                                                              比较两个指定长度的内存是否相同,也比较长的内存是否包含短的内存
ngx_atoi                                                                                           指定长度的字符串转换成数字
ngx_atosz                                                                                         指定长度的字符串转换成ssize_t类型数字
ngx_atoof                                                                                         指定长度的字符串转换成off_t类型数字
ngx_atotm                                                                                        指定长度的字符串转换成time_t类型数字

ngx_hextoi                                                                                        指定长度的字符串转换成十六进制数字
ngx_hex_dump                                                                                 把数字转换成16进制的字符串
ngx_encode_base64                                                                          base64编码
ngx_decode_base64                                                                          base64解码
ngx_utf8_decode                                                                              把 utf8字符解码成双字节的 unicode或是单字节字符,但是该函数会移动*p的值,

请注意

ngx_utf8_length                           得到utf8编码的字符占几个字节
ngx_utf8_cpystrn                         赋值utf8字符串,保证完整的复制
ngx_escape_uri                            对uri进行编码
ngx_unescape_uri                        对uri的进行解码
ngx_escape_html                         对html进行编码
ngx_sort                                       排序,主要是用于数组排序
ngx_qsort                                     快速排序
ngx_value                                     把宏数字转换成字符串

为了测试,我们可以用以下两种方式打印出来
1 ngx_str_t str ;
2 printf (” %* s” , str . len , str . data );
3 prinrf (”%V”, & str );

nginx基本数据结构及接口相关推荐

  1. awk分析nginx日志里面的接口响应时间

    2019独角兽企业重金招聘Python工程师标准>>> 最近,有客户反应客户端卡,老板集合技术人员开会讨论,找出慢的原因,由此产生了分析nginx响应时间,由于线上环境nginx日志 ...

  2. 【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装

    [送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. ...

  3. Nginx学习笔记(三) Nginx基本数据结构

    话说学习一种编程语言,例如C语言,我们首先学的也是数据结构,这是以后开发程序的关键.为了更好更方便的开发Nginx,Nginx自己实现了很多适合nginx的数据结构. Nginx中的数组 ngx_ar ...

  4. nginx基本数据结构ngx_module_t,ngx_module_s

    ngx_module_t是nginx的模块化架构最基本的数据结构.  其结构定义如下,其中的注释为功能说明: struct ngx_module_s { ngx_uint_t            c ...

  5. Nginx Kafka数据生产接口

    为什么80%的码农都做不了架构师?>>>    介绍 在向kafka产生数据的过程中,在随机的一台服务器上想给kafka集群发送数据,还要先安装相关语言的lib库,实在是繁琐,我的需 ...

  6. nginx加密,访问接口认证

    使用htpasswd加密做接口认证 首先,安装htpasswd: yum install -y httpd-tools mkdir -p /usr/local/src/nginx/ 设置用户以及密码: ...

  7. Nginx基本数据结构之ngx_hash_keys_arrays_t

    大家看到在构建一个ngx_hash_wildcard_t的时候,需要对通配符的哪些key进行预处理.这个处理起来比较麻烦.而当有一组key,这些里面既有无通配符的key,也有包含通配符的key的时候. ...

  8. Nginx基本数据结构之ngx_buf_t

    这个ngx_buf_t就是这个ngx_chain_t链表的每个节点的实际数据.该结构实际上是一种抽象的数据结构,它代表某种具体的数据.这个数据可能是指向内存中的某个缓冲区,也可能指向一个文件的某一部分 ...

  9. Nginx基本数据结构之ngx_hash_t

    ngx_hash_t是nginx自己的hash表的实现.定义和实现位于src/core/ngx_hash.h|c中.ngx_hash_t的实现也与数据结构教课书上所描述的hash表的实现是大同小异.对 ...

最新文章

  1. Yolo(3)(项目)Yolo v3 目标检测(85分类)
  2. Linux wait函数解析
  3. 数据结构笔记--二叉查找树概述以及java代码实现
  4. MultiBaC包消除不同组学数据之间的批次效应
  5. java int转String全部方式的效率对照与深入解析
  6. Django 之 Cookie判断是否已登陆(写成类)
  7. MQ事务消息实现方案
  8. 什么是U-Boot以及如何下载U-Boot源码
  9. poj 1679: The Unique MST【次小生成树】
  10. Flex与Java通信之HttpService方式
  11. Python爬虫高阶:微店混淆逆向解密
  12. [机器学习] 概念解析:从经验风险、结构风险到代价函数、损失函数、目标函数
  13. ORACLE HANDBOOK系列之五:PL/SQL中的集合类型(Collections in PL/SQL)
  14. php msn,利用php给MSN发送消息
  15. java单点登录解决方案_N多系统单点登录,实现、解决方案。四种解决方案
  16. Java线程何时放弃CPU时间片
  17. 如何部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程
  18. 接外包有哪些渠道呢?
  19. Android自定义带标题边框的Layout
  20. 斯蒂夫乔布斯传札记:第五波

热门文章

  1. Centos7.1 命令行与图形化界面登陆
  2. Domino下邮箱用户数据库限额自助释放物理空间
  3. MySQL Workbench的使用教程 (初级入门版)
  4. Linux 卷管理详解[ pv vg lv] —— 之三
  5. 蓝桥杯 - 试题 J: 砍竹子(双向链表+堆/思维)
  6. 牛客多校2 - Greater and Greater(bitset优化暴力)
  7. HDU - 6356 Glad You Came(线段树)
  8. 牛客 - 树上求和(贪心+树形dp)
  9. CodeForces - 798D Mike and distribution(构造+思维/玄学随机数)
  10. 【Boost】boost库中function和bind一起使用的技巧(二)