DragonOS内核核心API
循环链表管理函数
循环链表是内核的重要的数据结构之一。包含在kernel/common/list.h
中。
list_for_each_safe(ptr, n, head)
list_for_each_entry_safe(pos, n, head, member)
描述
从头开始迭代给定类型的链表(支持删除当前链表结点)
参数
pos
指向特定类型的结构体的指针
n
用于存储临时值的,和pos相同类型的指针
head
指向链表头结点的指针(struct List*)
member
struct List在pos的结构体中的成员变量名
list_prepare_entry(pos, head, member)
描述
为list_for_each_entry_continue()准备一个’pos’结构体
list_for_each_entry_safe_continue(pos, n, head, member)
描述
从指定的位置的【下一个元素开始】,继续迭代给定的链表.(支持删除当前链表结点)
参数
pos
指向特定类型的结构体的指针。该指针用作迭代的指针。
n
用于存储临时值的,和pos相同类型的指针
head
指向要开始迭代的struct List结构体的指针
member
struct List在pos的结构体中的成员变量名
list_for_each_entry_safe_continue_reverse(pos, n, head, member)
描述
从指定的位置的【上一个元素开始】,【逆序】迭代给定的链表。(支持删除当前链表结点)
基础C函数库
内核编程与应用层编程不同,你将无法使用LibC中的函数来进行编程。为此,内核实现了一些常用的C语言函数,并尽量使其与标准C库中的函数行为相近。值得注意的是,这些函数的行为可能与标准C库函数不同,请在使用时仔细阅读以下文档,这将会为你带来帮助。
字符串操作
long strnlen_user(const char *src, unsigned long maxlen)
long strncpy_from_user(char *dst, const char *src, unsigned long size)
int strcmp(char *FirstPart, char *SecondPart)
描述
比较两个字符串的大小。
返回值
情况 |
返回值 |
---|---|
FirstPart == SecondPart |
0 |
FirstPart > SecondPart |
1 |
FirstPart < SecondPart |
-1 |
printk_color(unsigned int FRcolor, unsigned int BKcolor, const char* fmt, ...)
描述
在控制台上以指定前景色和背景色格式化输出字符串.
CRC函数
函数列表
uint8_t crc7(uint8_t crc, const uint8_t *buffer, size_t len)
uint8_t crc8(uint8_t crc, const uint8_t *buffer, size_t len)
uint16_t crc16(uint16_t crc, uint8_t const *buffer, size_t len)
uint32_t crc32(uint32_t crc, uint8_t const *buffer, size_t len)
uint64_t crc64(uint64_t crc, uint8_t const *buffer, size_t len)
描述
用于计算循环冗余校验码