linux内核里的字符串转换 ,链表操作常用函数(收藏备用)

1.对双向链表的具体操作如下:

list_add ———向链表添加一个条目  
list_add_tail ———添加一个条目到链表尾部  
__list_del_entry ———从链表中删除相应的条目  
list_replace———用新条目替换旧条目  
list_del_init———从链表中删除条目后重新初始化  
list_move———从一个链表中删除并加入为另一个链表的头部  
list_move_tail———从一个列表中删除并加入为另一个链表的尾部  
list_is_last———测试是否为链表的最后一个条目  
list_empty———测试链表是否为空  
list_empty_careful———测试链表是否为空并没有被修改  
list_rotate_left———向左转动链表  
list_is_singular———测试链表是否只有一个条目  
list_cut_position———将链表一分为二  
list_splice———将两个链表进行合并  
list_splice_tail———将两个链表进行合并为一个链表  
list_splice_init———将两个链表进行合并为一个链表并初始化为空表  
list_splice_tail_init———将两个链表进行合并为一个链表(从尾部合并)并初始化为空表  
list_entry———获取条目的结构,实现对container_of 的封装  
list_first_entry———获取链表的第一个元素  
list_first_entry_or_null———获取链表的第一个元素  
list_for_each———遍历链表  
list_for_each_prev———反向遍历链表  
list_for_each_safe———遍历链表并删除链表中相应的条目  
list_for_each_prev_safe———反向遍历链表并删除链表中相应的条目  
list_for_each_entry———遍历指定类型的链表  
list_for_each_entry_reverse———反向遍历指定类型的链表  
list_prepare_entry———准备一个用于list_for_each_entry_continue 的条目  
list_for_each_entry_continue———从指定点开始继续遍历指定类型的链表  
list_for_each_entry_continue_reverse———从指定点开始反向遍历链表  
list_for_each_entry_from———从当前点遍历指定类型的链表  
list_for_each_entry_safe———反向遍历指定类型的链表并删除链表中相应的条目  
list_for_each_entry_safe_continue———继续遍历链表并删除链表中相应的条目  
list_for_each_entry_safe_from———从当前点遍历链表并删除链表中相应的条目  
list_for_each_entry_safe_reverse———反向遍历链表并删除链表中相应的条目  
list_safe_reset_next———获得下一个指定类型的条目  
hlist_for_each_entry———遍历指定类型的单指针表头链表  
hlist_for_each_entry_continue———从当前点继续遍历单指针表头链表  
hlist_for_each_entry_from———从当前点继续遍历单指针表头链表  
hlist_for_each_entry_safe———遍历指定类型的单指针表头链表并删除链表中相应的条目 

2.字符串相关

内核中经常会有字符串转换的需要, 其接口如下:
simple_strtoull———变换一个字符串为无符号的long long 型  
simple_strtoul———变换一个字符串为无符号的long 型  
simple_strtol———变换一个字符串为有符号的long 型  
simple_strtoll———变换一个字符串为有符号的long long 型  
vsnprintf———格式化一个字符串并放入缓冲区  
vscnprintf———格式化一个字符串并放入缓冲区  
snprintf———格式化一个字符串并放入缓冲区  
scnprintf———格式化一个字符串并放入缓冲区  
vsprintf———格式化一个字符串并放入缓冲区  
sprintf———格式化一个字符串并放入缓冲区  
vbin_printf———解析格式化字符串并将二进制值放入缓冲区  
bstr_printf———对二进制参数进行格式化字符串操作并放入缓冲区  
bprintf———解析格式化字符串并将二进制值放入缓冲区  
vsscanf———从格式化字符串中分离出的参数列表  
sscanf———从格式化字符串中分离出的参数列表  
kstrtol———变换一个字符串为long 型  
kstrtoul———变换一个字符串为无符号的long 型  
kstrtoull———变换一个字符串为无符号的long long 型  
kstrtoll———变换一个字符串为long long 型  
kstrtouint———变换一个字符串为无符号的int 型  
kstrtoint———变换一个字符串为int

示例:

char buf[]="115200"unsigned int rate;
kstrtouint(buf,0,&rate);

//buf:输入字符串,0:自动识别,也可以是10(10进制)或16(16进制),rate:存放转换后的整形值.
//当没有错误时返回值是0;

3.另外字符串本身的操作接口如下:

strnicmp———长度有限的字符串比较,这里不分大小写  
strcpy———复制一个以NULL 结尾的字符串  
strncpy———复制一个以NULL 结尾的有限长度字符串  
strlcpy———复制一个以NULL 结尾的有限长度字符串到缓冲区中  
strcat———在字符串后附加以NULL 结尾的字符串  
strncat———在字符串后附加以NULL 结尾的一定长度的字符串  
strlcat———在字符串后附加以NULL 结尾的一定长度的字符串  
strcmp———比较两个字符串  
strncmp———比较两个限定长度的字符串  
strchr———在字符串中查找第一个出现指定字符的位置  
strrchr———在字符串中查找最后出现指定字符的位置  
strnchr———在字符串中查找出现指定字符串的位置  
skip_spaces———从字符串中移除前置空格  
strim———从字符串中移除前置及后置的空格  
strlen———获得字符串的长度  
strnlen———获得一个有限长度字符串的长度  
strspn———计算一个仅包含可接受字母集合的字符串的长度  
strcspn———计算一个不包含指定字母集合的字符串的长度  
strpbrk———找到字符集合在字符串第一次出现的位置  
strsep———分割字符串  
sysfs_streq———字符串比较,用于sysfs  
strtobool———用户输入转换成布尔值  
memset———内存填充  
memcpy———内存复制  
memmove———内存复制  
memcmp———内存比较  
memscan———在内存中找指定的字符  
strstr———在一个以NULL 结尾的字符串中找到第一个子串  
strnstr———在一个限定长度字符串中找到第一个子串  
memchr———找到内存中的字符  
memchr_inv———找到内存中的不匹配字符
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、linux内核链表 1、普通链表的数据区域的局限性 之前定义数据区域时直接int data,我们认为我们的链表中需要存储的是一个int类型的数。但是实际上现实编程中链接中的节点不可能这么简单,而是多种多样的。 一般实际项目中的链表,节点中存储的数据其实是一个结构体,这个结构体中包含若干的成员,这些成员加起来构成了我们的节点数据区域。 2、一般性解决思路:即把数据区封装为一个结构体 (1)因为链表实际解决的问题是多种多样的,所以内部数据区域的结构体构成也是多种多样的。 这样也导致了不同程序当中的链表总体构成是多种多样的。 我们无法通过一套泛性的、普遍适用的操作函数来访问所有的链表,意味着我们设计一个链表就得写一套链表操作函数(节点创建、插入、删除、遍历……)。 (2)实际上深层次分析会发现 不同的链表虽然这些方法不能通用需要单独写,但是实际上内部的思路和方法是相同的,只是函数的局部地区有不同。 实际上链表操作是相同的,而涉及到数据区域的操作就有不同 (3)问题 能不能有一种办法把所有链表操作方法共同的部分提取出来用一套标准方法实现,然后把不同的部分留着让具体链表的实现者自己去处理。 3、内核链表的设计思路 (1)内核链表中实现一个纯链表的封装,以及纯链表的各种操作函数链表就是没有数据区域,只有前后向指针; 各种操作函数是节点创建、插入、删除、遍历。 这个纯链表本身自己没有任何用处,它的用法是给我们具体链表作为核心来调用。 4、list.h文件简介 (1)内核中核心纯链表的实现在include/linux/list.h文件中 (2)list.h中就是一个纯链表的完整封装,包含节点定义和各种链表操作方法。 二、内核链表的基本算法和使用简介 1、内核链表的节点创建、删除、遍历等 2、内核链表的使用实践 (1)问题:内核链表只有纯链表,没有数据区域,怎么使用? 使用方法是将内核链表作为将来整个数据结构的结构体的一个成员内嵌进去。类似于公司收购,实现被收购公司的功能。 这面要借助container_of宏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值