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 ...
随机推荐
- RabbitMQ学习笔记二:Java实现RabbitMQ
本地安装好RabbitMQ Server后,就可以在Java语言中使用RabbitMQ了. RabbitMQ是一个消息代理,从"生产者"接收消息并传递消息至"消费者&qu ...
- Java工程编码格式由GBK转化成utf-8(编码格式互转)
在写项目的过程中我发现有的地方编码格式被设置成了 gbk 如果用eclipse等工具直接改回utf-8编码格式则会出现乱码. 下载:https://download.csdn.net/download ...
- Java程序设计基础笔记 • 【第1章 初识Java】
全部章节 >>>> 本章目录 1.1 程序的概念及Java语言介绍 1.1.1 生活中的程序 1.1.2 计算机程序 1.1.3 算法和流程图 1.1.4 实践练习 1.2 ...
- 大厂必问的JVM面试题
本文目录: 讲一下JVM内存结构? 程序计数器 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 Java对象的定位方式 说一下堆栈的区别? 什么情况下会发生栈溢出? 类文件结构 什么是类加载 ...
- 最小生成树Kruskal算法(1)
概念 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. [1] 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆) ...
- Springboot项目引入druid安装部署使用
一.maven引入依赖,数据库驱动根据项目需求自行引入 <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot ...
- docker查看容器的ip地址
查看Docker的底层信息. docker inspect 会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息 # 列出所有容器的IP地址docker inspect --forma ...
- Linux的六种查找命令
http://www.ruanyifeng.com/blog/2009/10/5_ways_to_search_for_files_using_the_terminal.html 1. find fi ...
- PowerShell 【按任意键继续】
1 function Pause(){ 2 [System.Console]::Write('按任意键继续...') 3 [void][System.Console]::ReadKey(1) 4 } ...
- 深入理解Java虚拟机之自己编译JDK
题外话 最近在阅读<深入理解Java虚拟机>,其中有一小节实战是自己编译JDK,实际操作下来后遇到问题不少,为此特地记录,也希望可以给大家带来一些参考! 前置准备 平台及工具:Window ...