nginx开发:ngx_sprintf
格式化参数%系列,如果误用的话,轻则输出不正确,重则nginx可能core。
1. 格式:
%{格式描述}{输出类型描述}{数据类型描述}
2. 数据类型描述:
V:字符串,对应ngx_str_t *(注意是指针)
v:变量值,对应ngx_variable_value_t *(也是指针)
s:可定长字符串,对应uchar *(不使用定长功能的话,等价于标准C的s)
O:偏移量,对应off_t
P:进程ID,对应ngx_pid_t
T:时间,对应time_t
M:毫秒计时,对应ngx_msec_t
z:容量,对应ssize_t或size_t
i:nginx整数,对应ngx_int_t
d:系统整数,对应int
l:系统长整数,对应long
D:32位整数,对应int32_t或uint32_t
L:64位长整数,对应int64_t或uint64_t
A:原子整数,对应ngx_atomic_int_t或ngx_atomic_uint_t
f:浮点数,对应double,但是如果传入的参数是float,也会被C升级为double。
p:指针,对应void *
c:字符,对应int,但是如果传入的参数是char,也会被C升级为int。
Z:字符串尾0
N:换行
%:%
这里之所谓强调类型描述符,是因为这个类型在不同的系统下定义的长度不一(32位和64位系统),如果乱用,会导致移植性差。
3. 输出类型描述符
u:无符号数值
m:指定按数据类型的最大值所占宽度输出数字
x:小写16进制
X:大写16进制
.:后面的数字表示小数位数
*:指定输出字符串直至字符长度限制
这里需要说明的是输出类型描述符无法单独使用,必须与数据类型描述符一同使用,这和标准C是可能不一样的。
4. 格式描述
描述输出的宽度和填充内容,填充内容以%后第一个数字而定,‘0’代表以‘0’填出,其他内容则使用默认的‘ ’填充。宽度描述则是填充设定以后的数字。整个格式描述类似于021、2等等。
5. 整体举例
%5.2f:宽度5,小数位数2,输出double
%*s:限定长度输出字符串,数据定义需要两个参数,length和ptr
% 010ud,宽度10,以0补齐,输出unsigned int(新浪博客吃字符,所以在%和0之间加了空格,实际没有的)
% 10ui, 宽度10,以空格补齐,输出ngx_uint_t(同上)
ngx_sprintf()
函数用来拼字符串。
第一个参数传buffer地址,可以通过直接加指针值的方法,传某个原有字符串中间的地址,达到灵活修改字符串的目的;
第二个参数传格式,是nginx自定义的格式,因为它封装了字符串嘛,不得不自定义。最常用的是%V,代表ngx_str_t;
后面的变长参数就是传变量了,记得ngx_str_t要传指针。
nginx开发:ngx_sprintf的更多相关文章
- Nginx开发从入门到精通 学习目录分享学习 (阿里著作)
Nginx开发从入门到精通 缘起 nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块的开发以及它的内部 ...
- Nginx开发HTTP模块入门
Nginx开发HTTP模块入门 我们以一个最简单的Hello World模块为例,学习Nginx的模块编写.假设我们的模块在nginx配置文件中的指令名称为hello_world,那我们就可以在ngi ...
- nginx开发_ngx_palloc源码解析
功能简介 ngx_pool_t是nginx开发中最经常使用到的内存容器.对动态内存的封装,由框架进行创建与释放,模块开发过程中仅需要进行内存申请,不需要关注何时释放.常见的pool对象有: 1. ng ...
- nginx开发_配置项
nginx开发笔记_配置项 模块的配置项即nginx.conf中的指令,HTTP模块指令可以分为三个级别: main级,直接写在http{}块中的指令 server级,写在server{}块中的指令 ...
- Nginx开发从入门到精通
nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块 的开发以及它的内部原理,但是国内却没有一本关于这方面的 ...
- nginx开发_字符串操作函数
由于ngx_str_t为非NULL结尾的函数,且网络请求中有大量忽略大小写的需求,所以nginx内部封装了许多字符串操作相关的函数,函数名称极其相识,且使用时有有些约定,特此整理. 赋值&拷贝 ...
- Nginx开发从入门到精通 nginx平台初探
初探nginx架构(100%) 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢?这一节我们先来初识一下nginx框架吧. nginx在启动后,在un ...
- nginx开发笔记_ngx_hash源码解析
ngx_hash源码解析 ngx_hash是nginx中的hash表结构,具有以下特点: 静态结构,hash表创建后无法动态添加/删除KV. 采用连续存储方式解决碰撞问题.即出现碰撞的KV存放在连续地 ...
- nginx开发_ngx_http_script源码解析
功能简介 nginx中有很多配置项支持以变量的形式存在,在运行时根据实时值进行处理.例如如下配置: location / { sub_filter '<a href="http://1 ...
随机推荐
- 「MySql高级查询与编程」练习:企业员工管理
题目:企业员工管理 一.语言和环境 1.实现语言:SQL. 2.开发环境:MySQL,navicat for mysql. 二.题目(100分): 1.创建数据库及数据表: (1)创建数据库,名称为d ...
- Java初学者作业——编写JAVA程序,要求输入技术部门5位员工的理论成绩和实操成绩,计算并输出各位员工的最终评测成绩。
返回本章节 返回作业目录 需求说明: 某软件公司要求对技术部门的所有员工进行技能评测,技术评测分为两个部分:理论部分以及实操部分,最终评测成绩=理论成绩×0.4+实操成绩×0.6,要求输入技术部门5位 ...
- 【MySQL作业】多字段分组和 having 子句——美和易思分组查询应用习题
点击打开所使用到的数据库>>> 1.按照商品类型和销售地区分组统计商品数量和平均单价,并按平均单价升序显示. -- 按照商品类型和销售地区分组统计商品数量和平均单价,并按平均单价升序 ...
- RabbitMQ基础教程系列
Ubuntu16.04下,erlang安装和rabbitmq安装步骤 Ubuntu16.04下,rabbimq集群搭建 C# .net 环境下使用rabbitmq消息队列 .net core使用rab ...
- 关于一类容斥原理设计 dp 状态的探讨
写在前面 为什么要写?因为自己学不明白希望日后能掌握. 大体思路大概是 设计一个容斥的方案,并使其贡献可以便于计算. 得出 dp 状态,然后优化以得出答案. 下列所有类似 \([l,r]\) 这样的都 ...
- elasticsearch之警惕inner hits的性能问题
一.inner hits简介 elasticsearch提供了nested数据类型来处理主子文档的问题,可以解决子文档字段被分裂平铺导致字段之间失去了整体的关联性: elasticsearch提供的i ...
- Mybatis配置解析(核心配置文件)
4.配置解析 4.1.核心配置文件 Mybatis的配置文件包含了会深深影响mybatis行为的设置和属性信息 mybatis-config.xml properties(属性)重点 settings ...
- 【vps】教你写一个属于自己的随机图API
[vps]教你写一个自己的随机图API 前言 刚刚开始使用halo博客的时候,我就发现halo博客系统是可以使用随机图当背景的,所以也是使用了网上一些比较火的随机图API. 在上次发现了各种图片API ...
- DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | TORCH.AUTOGRAD
torch.autograd 是PyTorch的自动微分引擎,用以推动神经网络训练.在本节,你将会对autograd如何帮助神经网络训练的概念有所理解. 背景 神经网络(NNs)是在输入数据上执行的嵌 ...
- SpringMVC注解式开发-RequestMapping放到类上
功能一:请求地址公共部分,模块名称 (放在类) 功能二: