kstdio.h#

kstdio.h为内核提供了标准输入输出函数

Author

Shihong Wang (jack4shihong@gmail.com)

Version

0.1

Date

2023-04-09

Copyright

Copyright Shihong Wang (c) 2023 with GNU Public License V3.0

Warning

kstdio库仅供内核使用, 用户程序请使用ustdio

Functions

size_t kprintf(const char *format, ...)#

kprintf用于格式化输出字符串

关于各个字段的说明:

  • flag字段:

    • -: 左对齐输出, 默认是右对齐

    • +: 输出正数前添加加号, 默认不添加

    • #: 当typeb, o, x, X时, 添加前缀0b, 0或者0x

    • 0: 使用0填充对齐, 默认使用空格填充对齐

  • width字段:

    • 数字: 设置对齐的宽度, 例如: printf("%5d", 100) 将会输出 100

    • *: 动态参数, 由后续的数字指定, 例如: printf("%*d", 5, 10) 等价于 printf(“%5d”, 10) -precision字段: -.数字: 设置输出的位数, 例如:printf(“%.2d”, 111)将会输出11 -.*: 动态参数, 由后续的数字指定, 例如:printf(“%.*d”, 2, 111)等价于 printf("%.2d", 111)

  • length字段:

    • h: 输出一个16位宽度的整数, 即: short, unsigned short, int16_t, uint16_t

    • l: 输出一个64位宽度的整数, 即: long, unsigned long, int64_t, uint64_t

    • ll: 输出一个64位宽度的整数, 即: long long, unsigned long long

    • PS: RISC-V LP64中long long和long都是64位

  • type字段:

    • %: 输出一个%

    • p: 输出一个指针, 需要转换为(void*)

    • c: 输出一个字符

    • s: 输出一个\0结尾的字符串

    • b: 以二进制输出一个整数, 无符号

    • o: 以八进制输出一个整数, 无符号

    • i: 以十进制输出一个整数, 有符号

    • d: 以十进制输出一个整数, 有符号

    • u: 以十进制输出一个整数, 无符号

    • x: 以十六进制输出一个整数, 小写字母, 无符号

    • X: 以十六进制输出一个整数, 大写字母, 无符号

    • n: 到此处已经输出的字符的数量, 不会输出文本, 而是将值保存到地址中. 参考: https://blog.csdn.net/zsx0728/article/details/118100389

Note

kprintf函数可以输出的字符串最大长度由constrains.h中的PRINTF_STRING_SIZE宏常量的值决定

Note

格式控制字符: %[flag][width][precision][length]<type>. 其中:

  • type字段必须存在, 其余字段均可选

Warning

kprintf函数仅供内核使用, 用户程序请使用uprintf函数

Warning

目前kprintf最终向uart输出字符串

Parameters:
  • format – 含格式控制字符的格式字符串

  • ... – 可变参数列表

Returns:

size_t 输出的字符串中的字符数