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 ...
随机推荐
- .net core的Swagger接口文档使用教程(一):Swashbuckle
现在的开发大部分都是前后端分离的模式了,后端提供接口,前端调用接口.后端提供了接口,需要对接口进行测试,之前都是使用浏览器开发者工具,或者写单元测试,再或者直接使用Postman,但是现在这些都已经o ...
- Kubernetes 部署 Kubernetes-Dashboard v2.0.0 尝鲜
目录· . 一.简介· . 二.兼容性· . 三.部署 Kubernetes Dashboard· . 1.Dashboard RBAC· . 2.创建 ConfigMap.Secret· . 3.k ...
- 怎样用命令行导入注册表 .reg 文件
https://stackoverflow.com/questions/49676660/how-to-run-the-reg-file-using-powershell Get-Command re ...
- SQL高级优化(五)之执行计划
一.explain 执行计划:在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的. explain:MySQL执行计划的工具,查看MySQL如 ...
- 谱分解(SD)
前提:矩阵A必须可相似对角化! 充分条件: $A$ 是实对称矩阵 $A$ 有 $n$ 个互异特征值 $A^{\wedge} 2=A $ $\mathrm{A}^{\wedge} 2=\mathrm{E ...
- day 14 C语言strcmp()函数:比较两个字符串
(1).下列关于C语言文件的叙述中正确的是[C] (A).文件由一系列数据依次排列组成,只能构成二进制文件 (B).文件由结结构序列组成,可以构成二进制文件或文本文件 (C).文件由数据序列组成,可以 ...
- 【记录一个问题】cv::cuda::dft()比cv::dft()慢很多
具体的profile调用图如下: 可以看见compute很快,但是构造函数很慢. nvidia官网看到几篇类似的帖子,但是没有讲明白怎么解决的: opencv上的参考文档:https://docs.o ...
- Cesium入门10 - 3D Tiles
Cesium入门10 - 3D Tiles Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 我们团队有时把Ces ...
- 话说C#程序员人手一个ORM
话说C#程序员人手一个ORM,确实没有必要再写ORM了,不过我的ORM并不是新的,是从DBHelper演化过来的,算是DBHelper魔改版. 目前流行的ORM有EF.Dapper.SqlSugar. ...
- Python webargs 模块
一.安装 python3 -m pip install webargs 文档 二.基础特性 # encoding=utf-8 from flask import Flask from webargs ...