Nginx源码分析 - 基础数据结构篇 - 字符串结构 ngx_string.c(08)

5.nginx源码分析之数据结构:ngx_string ngx_string nginx的数据结构设计的非常精巧,高效,学习nginx的数据结构设计可以加深我们对于其后续代码的阅读深度。 nginx的数据结构在源码包的src/core目录中,nginx对应的文件是ngx_string.c和ngx_string.h文件: [root@rsync core]# ll ngx_string.* -rw-r--r-- 1 1001 1001 43851 阅读详情

目录

一、数据结构定义

1. ngx_str_t 字符串结构

2. ngx_keyval_t 字符串K V结构

一、数据结构图

三、具体函数实现

1. 初始化一个字符串 ngx_string

2. 设置字符串


Nginx的ngx_str_t字符串结构非常简单和好用。

nxg_string.c文件中包含了很多常用的字符串操作方法,具体我们就不讲解了,主要简单来看下Nginx的字符串数据结构

一、数据结构定义


1. ngx_str_t 字符串结构


/**
 * 字符串结构
 */
typedef struct {
    size_t      len; //字符串长度
    u_char     *data; //具体的指针地址
} ngx_str_t;

2. ngx_keyval_t 字符串K V结构


/**
 * 字符串的K V结构
 */
typedef struct {
    ngx_str_t   key;
    ngx_str_t   value;
} ngx_keyval_t;

一、数据结构图


 

三、具体函数实现


1. 初始化一个字符串 ngx_string


//初始化一个字符串
#define ngx_string(str)     { sizeof(str) - 1, (u_char *) str }

2. 设置字符串


//将一个字符串设置为NULL
#define ngx_null_string     { 0, NULL }
//设置一个字符串
#define ngx_str_set(str, text)                                               \
    (str)->len = sizeof(text) - 1; (str)->data = (u_char *) text
#define ngx_str_null(str)   (str)->len = 0; (str)->data = NULL

 

【信息科学与工程学】计算机科学与自动化——第一百九十八篇 高并发高可用的知识点01 以上补充约 110 行,涵盖分布式协调、服务网格细节、数据库高级特性、性能分析工具、混沌工程、安全渗透、合规审计、研发效能、新兴技术、架构模式、实用工具及经典论文。涵盖数据库索引与锁、NoSQL、前端性能、安全攻防、压测工具深入、监控深入、云原生存储、服务治理扩展、代码质量、DevOps 文化、行业标准、软技能及未来趋势。好的,继续补充更多高并发、高可用、高可靠的知识与技术,涵盖更深层的数据库内部机制、分布式事务、服务治理、运维自动化、安全与前沿技术等领域。 阅读详情

相关推荐

串级PID 位置环+速度环

串级PID 位置环+速度环

weixin_62775618的博客 9109

Nginx源码学习(2)----ngx_string

Ngnix对一些基础的数据结构进行了自己的封装。我首先从最简单的string 这个最基础的方法下手。 主要包括了 ¢Nginx自己的字符串API —内存操作相关 —字符串格式化 —字符串查找 —格式转换 ¢Base64/URL/UTF-8 ¢字符串和数字之间的转换   首先看一下他的基础的结构 typedef struct { size_t len;

wintree的专栏 7506

EtherCAT-7 从站代码移植-SPI

STM32F103 + AX58100,从站代码移植。

tianya_xuan的博客 3568

Nginx学习(5)—— 基本结构(源码)

可以看到,Nginx自定义了一个带有长度的字符串结构。这意味着,data所指向的字符串并不是以 “\0” 结束的。:对src按照type方式编码,结果放到dst中。如果dst传NULL可获得结果的空间大小。:将src的前n个字符转换成小写存放到dst字符串中。:将结果放到dst中,需要保证dst有足够的空间存放结果。:log为后续在该pool上进行操作时输出日志的对象。:dst传NULL返回结果占用空间大小。:dst传NULL返回结果占用空间大小。

Stars____的博客 1424

从零到一:Zephyr RTOS 在 STM32F4 上的移植与实战(含设备树配置详解)

本文详细介绍了如何从零开始将Zephyr RTOS移植到STM32F4开发板,涵盖开发环境搭建、硬件抽象层分析、设备树配置及系统裁剪等关键步骤。通过实战案例,帮助开发者掌握Zephyr RTOS在嵌入式设备中的应用,提升物联网边缘计算设备的开发效率。

weixin_26976635的博客 590

OpenClaw记忆插件升级实战:从memory-lancedb-pro安装到AgentSkill封装

向量数据库作为现代AI应用的核心基础设施,通过将非结构化数据转换为高维向量并利用相似度检索实现语义理解。其原理基于嵌入模型生成向量表示,结合近似最近邻搜索算法实现高效查询。这项技术为智能体系统提供了长期记忆和上下文感知能力,显著提升了对话连贯性与任务执行效率。在AI智能体开发领域,向量数据库常用于知识库构建、对话历史管理和个性化推荐等场景。本文聚焦OpenClaw框架中memory-lancedb-pro插件的部署实践,针对**插件加载顺序**和**Apache Arrow依赖**两大常见痛点,通过封装成可

weixin_42525482的博客 638

Nginx-string解析

我们先看看ngx_string中定义的几个数据结构 typedef struct { size_t len; u_char *data; } ngx_str_t; 这个结构体就是最基础的nginx中的字符串结构了,其中 len表示这个字符串的长度, *data是一个指向无符号char类型的指针。 从这个结构体可以看出,后续关于字符串长度的操作strl

whatever you do - just have fun! 1835

2025.03.14【读书笔记】|GWAS分析神器:BOLT-LMM工具介绍与快速安装

在生物信息学领域,全基因组关联分析(GWAS)已成为揭示遗传与疾病关系的强有力工具。BOLT-LMM作为一款专为大规模样本量设计的GWAS分析工具,将极大地提高研究人员的工作效率。大家好,今天我们来聊聊一个非常强大的生物信息学工具——BOLT-LMM。它是基于线性混合模型(LMM)的全基因组关联分析(GWAS)分析工具,通过快速的方差近似方法在计算效率上实现了显著的提升。BOLT-LMM的高效性能使其成为大规模样本GWAS分析的理想选择,它将进一步推动生物信息学和遗传学研究的发展。

1093

nginx string 函数说明文档

ngx_string.h提供了一些操作字符串的函数,现总结如下: #define ngx_string(str)     { sizeof(str) - 1, (u_char *) str }  把以\0结束的字符串转换为ngx_str_t类型 #define ngx_null_string     { 0, NULL } 可以把一个ngx_str_t类型的变量赋为

扎实基础方能走远 1973

华三模拟器实战:3分钟搞定路由器DHCP地址池配置(附常见错误排查)

本文提供华三模拟器中路由器DHCP地址池的实战配置指南。通过分步详解,帮助用户在3分钟内完成基础设置,并深入讲解多地址池、中继配置等进阶应用。文章重点剖析了DHCP服务无法工作的常见原因,提供从客户端到服务器的系统性排错方法,助力快速定位并解决地址分配失败、获取参数错误等典型问题。

w1x2y3的博客 360

SAP 合并报表(EC-CS)完整方法论 + 全业务操作步骤

SAP合并报表(EC-CS)方法论与操作指南摘要 SAP EC-CS模块提供完整的集团合并解决方案,其核心方法论基于会计准则和集团管控逻辑,通过6大维度构建标准化合并体系:组织架构标准化、数据采集标准化、外币换算规则化、内部交易自动化抵消、股权与商誉规范化、报表出具灵活化。 实施过程分为两个阶段: 上线前配置阶段(12个步骤):包括合并架构搭建、科目表配置、外币规则设定、抵消规则定义等基础工作 日常操作阶段(10个步骤):涵盖数据报送、外币换算、内部对账、自动抵消、调整分录等月结流程 系统优势包括: 支持多

金牌架构师 1364

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_atoi 函数

变量说明value:用于存储当前累积的整数值。cutoff:整数最大值除以 10 的结果。cutlim:整数最大值对 10 取余的结果。:当前平台的整型最大值定义在 src/core/ngx_config.h在每次累加之前,通过比较当前值与cutoff和cutlim来判断是否会溢出。这种方法避免了直接进行溢出操作导致未定义行为。

weixin_41812346的博客 461

第一章:Profibus DP通信简介

PROFIBUS (Process Fieldbus)的缩写,是一种国际化的、开放的、不依赖于设备生产商的现场总线标准。它广泛应用于制造业自动化、流程工业自动化和楼宇、交通、电力等其他工业自动化领域。串行现场总线主要用来连接数字现场设备或中、低功能的系统,如传感器、执行机构、变送器、可编程序控制器(PLC)、数控装置(NC)、编程设备、本地人机接口等。

qq_22560021的博客 4893

Nginx 源码分析-- ngx_string 的一些简单分析

  对于一个web服务器程序来说,对字符串处理的需求是必须的。由于web环境下的各种编码,也导致了web服务器程序字符串处理的繁杂性。在nginx源码中,ngx_string.c 这个文件就是来应对字符串处理的一些源码,源码中经常的使用到了这里中的函数,本文对ngx_string.c 进行一些简单的分析,以方便阅读其他源码。   我们来看它的基本数据结构: typedef struct ...

weixin_30624825的博客 353

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Nginx源码分析--字符串处理

ngx_string.c void ngx_strlow(u_char *dst, u_char *src, size_t n); 将src的前n个字符转换成小写存放在dst字符串当中,调用者需要保证dst指向的空间大于等于n。操作不会对原字符串产生变动。如要更改原字符串,可以: ngx_str_t str = ngx_string("hello world"); ngx_strlow(s

编程的本质是数学问题 2168

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ngx_string.c

/* * Copyright (C) Igor Sysoev */ #include #include static u_char *ngx_sprintf_num(u_char *buf, u_char *last, uint64_t ui64, u_char zero, ngx_uint_t hexadecimal, ngx_uint_t width); static

tianmo2010的专栏 1992

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_sprintf_str 函数

【代码】Ubuntu 下 nginx-1.24.0 源码分析 - ngx_sprintf_str 函数。

weixin_41812346的博客 589

Apache APISIX opentelemetry 插件完全指南:基于 OTLP/HTTP 的分布式链路追踪

本文以 Apache APISIX 官方文档 [docs/zh/latest/plugins/opentelemetry.md](https://link.gitcode.com/i/758f3fdfc436e41cd7104fde5d20f154) 为主体,结合仓库内插件源码 [apisix/plugins/opentelemetry.lua](https://link.gitcode.com/

gitblog_00130的博客 1062

Apache APISIX 集成 Nacos 服务发现:从配置到源码级原理

> 导读:本文以 Apache APISIX 官方文档 [docs/en/latest/discovery/nacos.md](https://link.gitcode.com/i/0ba8ecdc5eded6510493879e0eced17a) 为主线,完整讲解如何让 APISIX 的 Upstream 通过 Nacos 注册中心按服务名动态发现健康实例,覆盖 `conf/config.yam

gitblog_00134的博客 1138

Apache APISIX brotli 插件:动态 Brotli 压缩配置、源码原理与实战指南

本篇技术指南围绕 Apache APISIX 的 `brotli` 插件展开,讲解如何在网关层面动态启用 Brotli 响应压缩:从 brotli 共享库的前置编译安装、七大配置属性的完整含义,到通过 Admin API 在路由上启停插件并验证 `Content-Encoding: br` 的完整链路。读完本文,你将掌握 brotli 插件的全部配置项与合法取值,理解其“协商 Accept-Enc

gitblog_01193的博客 331

nginx数据结构(ngx_str_t)

typedef struct { size_t len; u_char *data; } ngx_str_t; /*通过一个以’\0’结尾的普通字符串str构造一个nginx的字符串, 鉴于其中采用sizeof操作符计算字符串长度,因此参数必须是一个常量字符串。*/ #define ngx_string(str) {sizeof(str)-1,(u_char *

had2009的博客 1691

nginx 学习(二) hello world 程序

hello wrold 1 本节目的 2实现步骤   2.1config编写   2.2模块代码实现   2.3配置文件的编写 3将模块编译进nginx中 1本节的目的 本节用nginx来实现一个经典程序hello world,这个程序也是我们学任何编程语言时首先接触的程序,这个程序的目的是 初步了解nginx怎样嵌入第三方模块,也是学习nginx的HTTP模块的入门

yanziguilai的专栏 2627

nginx封装的数据结构

ngx_string:宏函数,只能用于赋值初始化#define ngx_string(str) { sizeof(str) - 1, (u_char *) str }ngx_string与ngx_null_string是“{,}”格式的,故只能用于赋值时初始化,如: ngx_str_t str = ngx_string("hello world"); ngx_str_t str1 = ngx

LC900730的博客 469

数据结构:串(String)【详解】

串 一、知识框架 二、考纲内容 字符串模式匹配 三、串的定义 串( string)是由零个或多个字符组成的有限序列,又名叫字符串。 一般记为: 其中,S是串名,单引号括起来的字符序列是串的值; ai 可以是字母、数字或其他字符;串中字符的个数n称为串的长度。 另外还有一些其它概念: 空串:n=0时的串称为空串。 空格串:是只包含空格的串。注意它与空串的区别,空格串是有内容有长度的,而且可以不止一个空格。 子串与主串:串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。

UniqueUnit的博客 5万+

java数据结构-String类详解

java数据结构整理开篇说明String字符串常量池String类中方法说明 开篇说明 最近在准备跳槽,目标岗位是后台java工程师,但是对java中的数据结构总是今天记住明天就忘了?,因此开此专栏,边记录边刷题,每天进步一点点,争取早日上岸! String String在java里是最简单的数据结构了,它是一个final类,至于final的具体原理,先埋个坑,之后把final文章写好就粘过来。反正知道final修饰的话,String类是不能被继承的,并且成员方法method都会隐式被指定为final

weixin_42139800的博客 1204
上一篇: Nginx源码分析 - 基础数据结构篇 - hash表结构 ngx_hash.c(07)
下一篇: Linux c 开发 - 内存管理器ptmalloc
老码农zhuli
老码农zhuli 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄14年 2456粉丝 312原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值