格式化参数%系列,如果误用的话,轻则输出不正确,重则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的更多相关文章

  1. Nginx开发从入门到精通 学习目录分享学习 (阿里著作)

    Nginx开发从入门到精通   缘起 nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块的开发以及它的内部 ...

  2. Nginx开发HTTP模块入门

    Nginx开发HTTP模块入门 我们以一个最简单的Hello World模块为例,学习Nginx的模块编写.假设我们的模块在nginx配置文件中的指令名称为hello_world,那我们就可以在ngi ...

  3. nginx开发_ngx_palloc源码解析

    功能简介 ngx_pool_t是nginx开发中最经常使用到的内存容器.对动态内存的封装,由框架进行创建与释放,模块开发过程中仅需要进行内存申请,不需要关注何时释放.常见的pool对象有: 1. ng ...

  4. nginx开发_配置项

    nginx开发笔记_配置项 模块的配置项即nginx.conf中的指令,HTTP模块指令可以分为三个级别: main级,直接写在http{}块中的指令 server级,写在server{}块中的指令 ...

  5. Nginx开发从入门到精通

    nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块 的开发以及它的内部原理,但是国内却没有一本关于这方面的 ...

  6. nginx开发_字符串操作函数

    由于ngx_str_t为非NULL结尾的函数,且网络请求中有大量忽略大小写的需求,所以nginx内部封装了许多字符串操作相关的函数,函数名称极其相识,且使用时有有些约定,特此整理. 赋值&拷贝 ...

  7. Nginx开发从入门到精通 nginx平台初探

    初探nginx架构(100%) 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢?这一节我们先来初识一下nginx框架吧. nginx在启动后,在un ...

  8. nginx开发笔记_ngx_hash源码解析

    ngx_hash源码解析 ngx_hash是nginx中的hash表结构,具有以下特点: 静态结构,hash表创建后无法动态添加/删除KV. 采用连续存储方式解决碰撞问题.即出现碰撞的KV存放在连续地 ...

  9. nginx开发_ngx_http_script源码解析

    功能简介 nginx中有很多配置项支持以变量的形式存在,在运行时根据实时值进行处理.例如如下配置: location / { sub_filter '<a href="http://1 ...

随机推荐

  1. .net core的Swagger接口文档使用教程(一):Swashbuckle

    现在的开发大部分都是前后端分离的模式了,后端提供接口,前端调用接口.后端提供了接口,需要对接口进行测试,之前都是使用浏览器开发者工具,或者写单元测试,再或者直接使用Postman,但是现在这些都已经o ...

  2. Kubernetes 部署 Kubernetes-Dashboard v2.0.0 尝鲜

    目录· . 一.简介· . 二.兼容性· . 三.部署 Kubernetes Dashboard· . 1.Dashboard RBAC· . 2.创建 ConfigMap.Secret· . 3.k ...

  3. 怎样用命令行导入注册表 .reg 文件

    https://stackoverflow.com/questions/49676660/how-to-run-the-reg-file-using-powershell Get-Command re ...

  4. SQL高级优化(五)之执行计划

    一.explain 执行计划:在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的. explain:MySQL执行计划的工具,查看MySQL如 ...

  5. 谱分解(SD)

    前提:矩阵A必须可相似对角化! 充分条件: $A$ 是实对称矩阵 $A$ 有 $n$ 个互异特征值 $A^{\wedge} 2=A $ $\mathrm{A}^{\wedge} 2=\mathrm{E ...

  6. day 14 C语言strcmp()函数:比较两个字符串

    (1).下列关于C语言文件的叙述中正确的是[C] (A).文件由一系列数据依次排列组成,只能构成二进制文件 (B).文件由结结构序列组成,可以构成二进制文件或文本文件 (C).文件由数据序列组成,可以 ...

  7. 【记录一个问题】cv::cuda::dft()比cv::dft()慢很多

    具体的profile调用图如下: 可以看见compute很快,但是构造函数很慢. nvidia官网看到几篇类似的帖子,但是没有讲明白怎么解决的: opencv上的参考文档:https://docs.o ...

  8. Cesium入门10 - 3D Tiles

    Cesium入门10 - 3D Tiles Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 我们团队有时把Ces ...

  9. 话说C#程序员人手一个ORM

    话说C#程序员人手一个ORM,确实没有必要再写ORM了,不过我的ORM并不是新的,是从DBHelper演化过来的,算是DBHelper魔改版. 目前流行的ORM有EF.Dapper.SqlSugar. ...

  10. Python webargs 模块

    一.安装 python3 -m pip install webargs 文档 二.基础特性 # encoding=utf-8 from flask import Flask from webargs ...