全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux

         前面看了vsprintf的实现,在代码中看到这个函数经过又一层封装变成了sprintf。之前看vsprintf的时候,其实看得也有点糊涂。其实,结合这个代码实现倒是有点理解了这个使用方式。

         其实,vsprintf的部分参数确定其实正好是通过va_start来实现的。在vsprintf中,通过va_arg类似逐个遍历的方式处理每个参数。

         也基本上可以理解为什么用到了__va_rounded_size这样的处理,其实这个主要是因为处理的对象是函数的参数。而这个都是在堆栈中,因此得有这样的一个对齐要求。

         而sprintf的功能,类似printf,只是这个比较特殊,打印的位置是存储的buffer。相应软件接口的调用:

         这个打印的位置是term,相应的定义:

         打印的位置是32个字节。这个可以通过内存的查看来看一下这个结果,其实这个在嵌入式里面也可以应用下。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐