linux内核驱动中对字符串的操作【转】
转自:http://www.360doc.com/content/12/1224/10/3478092_255969530.shtml
Linux内核中关于字符串的相关操作,首先包含头文件:
- #include <linux/string.h>
可用函数包括如下:
lib/string.c
- int strnicmp(const char *s1, const char *s2, size_t len)
- int strcasecmp(const char *s1, const char *s2)
- int strncasecmp(const char *s1, const char *s2, size_t n)
- char *strcpy(char *dest, const char *src)
- char *strncpy(char *dest, const char *src, size_t count)
- size_t strlcpy(char *dest, const char *src, size_t size)
- char *strcat(char *dest, const char *src)
- char *strncat(char *dest, const char *src, size_t count)
- size_t strlcat(char *dest, const char *src, size_t count)
- int strcmp(const char *cs, const char *ct)
- int strncmp(const char *cs, const char *ct, size_t count)
- char *strchr(const char *s, int c)
- char *strrchr(const char *s, int c)
- char *strnchr(const char *s, size_t count, int c)
- char *skip_spaces(const char *str)
- char *strim(char *s)
- size_t strlen(const char *s)
- size_t strnlen(const char *s, size_t count)
- char *strpbrk(const char *cs, const char *ct)
- char *strsep(char **s, const char *ct)
- bool sysfs_streq(const char *s1, const char *s2)
- void *memset(void *s, int c, size_t count)
- void *memcpy(void *dest, const void *src, size_t count)
- void *memmove(void *dest, const void *src, size_t count)
- int memcmp(const void *cs, const void *ct, size_t count)
- void *memscan(void *addr, int c, size_t size)
- char *strstr(const char *s1, const char *s2)
- char *strnstr(const char *s1, const char *s2, size_t len)
- void *memchr(const void *s, int c, size_t n)
用法说明:
int strnicmp(const char *s1, const char *s2, size_t len)
功能:比较字符串s1和s2的前len个字符串的大小,不区分字母大小写。
返回:返回的是字符串s1与s2能比较出大小的那个字符转换成小写后两者的差值。相等返回0。
int strcasecmp(const char *s1, const char *s2)
功能:比较字符串s1和s2的大小,同样不区分大小写。
返回:返回的是字符串s1与s2能比较出大小的那个字符转换成小写后两者的差值。相等返回0
注意:这儿字符串s1的长度应该大于s2的长度。
int strncasecmp(const char *s1, const char *s2, size_t n)
功能:比较字符串s1和s2的前n个字符串的大小,不区分字母大小写。
返回:返回的是字符串s1与s2能比较出大小的那个字符转换成小写后两者的差值。相等返回0 。
char *strcpy(char *dest, const char *src)
功能:把src所指的以NULL结束的字符串复制到dest所指的字符串中。
返回:返回指向dest的指针。
注意:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
char *strncpy(char *dest, const char *src, size_t count)
功能:将字符串src中最多count个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够count个字符才停止复制),返回指向dest的指针。
返回:返回指向dest的指针。
注意:
如果count > dest串长度,dest栈空间溢出产生崩溃异常。
否则:
1)src串长度<=dest串长度,(这里的串长度不包含串尾NULL字符)
如果count = [0, src串长度],src的前count个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。
这种情况一般这样使用:
count = src串长度+1,连src的NULL字符一起复制。
count = dest串长度,[0,src串长度]处存放src字串,[src串长度, dest串长度]处存放NULL。
2)src串长度 > dest串长度
如果count = dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑src串复制完整性,可以将dest最后一字符置为NULL。
size_t strlcpy(char *dest, const char *src, size_t size)
功能:把src所指的由NULL结束的字符串最多size个字符复制到dest所指的字符串中。
返回:返回指向dest的指针。
注意:strlcpy比strncpy能更好的处理NULL事件,然而strlcpy不是ANSI C函数,一般在linux下使用
因此建议在linux驱动中使用strlcpy函数。
char *strcat(char *dest, const char *src)
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0’)并添加'\0'。
返回:返回指向dest的指针。
注意:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
char *strncat(char *dest, const char *src, size_t count)
功能:把src所指字符串的前count个字符添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
返回:返回指向dest的指针。
注意:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
size_t strlcat(char *dest, const char *src, size_t count)
功能:把src所指字符串的前count个字符添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
返回:返回指向dest的指针。
注意:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。同样建议使用strlcat而不是strncat。
int strcmp(const char *cs, const char *ct)
功能:比较字符串cs和ct的大小,区分大小写。
返回:返回的是字符串s1与s2能比较出大小的那个字符两者的差值。相等返回0。
注意:比较的最长长度为字符串cs的长度。
int strncmp(const char *cs, const char *ct, size_t count)
功能:比较字符串cs和ct前n个字符串的大小,区分大小写。
返回:返回的是字符串s1与s2能比较出大小的那个字符两者的差值。相等返回0。
注意:比较的最长长度为字符串cs的长度。
char *strchr(const char *s, int c)
功能:查找字符串s中首次出现字符c的位置 。
返回:如果字符c出现在字符串s中,则返回首次出现c的位置的指针,如果没有出现,则返回NULL。
char *strrchr(const char *s, int c)
功能:查找字符c在字符串s中末次出现的位置。
返回:从字符串s中的最后出现出字符c位置的指针,如果没出现,返回NULL。
char *strnchr(const char *s, size_t count, int c)
功能:查找字符c在字符串s前count个字符中首次出现的位置。
返回:从字符串s中的前count字符中出现出字符c位置的指针,如果没出现,返回NULL。
char *skip_spaces(const char *str)
功能:除去字符串str首部的空格字符。
返回:除去空格字符的字符串指针。
char *strim(char *s)
功能:除去字符串str首部与尾部的空格字符。
返回:除去空格字符的字符串指针。
size_t strlen(const char *s)
功能:计算字符串s的长度,不包括'\0'在内。
返回:返回s的长度,不包括结束符NULL。
size_t strnlen(const char *s, size_t count)
功能:计算字符串s的长度,这个长度最大计数为count,不包括'\0'在内。
返回:返回s的长度,不包括结束符NULL。
char *strpbrk(const char *cs, const char *ct)
功能:在字符串cs中寻找字符串ct中任何一个字符相匹配的第一个字符的位置,空字符NULL不包括在内。
返回:返回字符串cs中指向第一个位置字符串指针。
char *strsep(char **s, const char *ct)
功能:以字符串ct分解字符串s指向字符串指针所指向的字符串。
返回:返回s指向的字符串按ct分解的前面字符串(不包含ct),s指向了按ct分解的后面字符串(不包含ct)。
bool sysfs_streq(const char *s1, const char *s2)
功用:判断字符串s1与字符串s2是否相等。
返回:如果相等,返回真;否则返回假。
注意:本函数更多用于linux 通过sysfs输入的字符串,当使用echo命令时,如:echo 1024 > /sys/module/e1000/parameters/copybreak,echo命令通常会在尾部附加一个’\n’字符。举例,s1 = “abdc\n”,s2 = “abdc”,则判定s1与s2是相等的。而s1 = “abdc\nd”,s2 = “abdc”,则s1 != s2。
void *memset(void *s, int c, size_t count)
功能:将s指向的count单位(一个字节为一个单位)内存空间以字符c填充。
返回:无。
注意:memset用于常规内存。如果要对IO内存操作,则用memset_io(void *s,int c,size_t count)
void *memcpy(void *dest, const void *src, size_t count)
功能:从src指向的内存的内容复制count单位(一个字节为一个单位)到dest指向的内存区域。
返回:无。
注意:两个内存区域不能重叠,如果要对IO内存使用,则用memcpy_fromio( )。
void *memmove(void *dest, const void *src, size_t count)
功能:从src指向的内存的内容复制count单位(一个字节为一个单位)到dest指向的内存区域。
返回:无。
注意:两个内存区域可以重叠,如果要对IO内存使用,则用memcpy_fromio( )。
int memcmp(const void *cs, const void *ct, size_t count)
功能:比较两个内存区域的前count单位(字节)。
返回:当cs < ct时,返回值<0 ;当cs = ct时,返回值=0;当cs > ct时,返回值>0。返回的具体值为两个内存区域能比较大小的内存单元的内容的差值,比较还是以char比较的。
void *memscan(void *addr, int c, size_t size)
功能:在内存区域中查找第一次出现字符c的位置,最多查找size单位。
返回:返回位置指针;如果没有出现,返回size单位后的内存指针。
char *strstr(const char *s1, const char *s2)
功能:在字符串s1查找第一次出现字符串s2(包含s2除NULL的其他全部内容)的位置。
返回:返回位置指针;如果没有出现,返回NULL。
char *strnstr(const char *s1, const char *s2, size_t len)
功能:在字符串s1查找第一次出现字符串s2(包含s2除NULL的其他全部内容)的位置,最多查找len长度。
返回:返回位置指针;如果没有出现,返回NULL。
void *memchr(const void *s, int c, size_t n)
功能:在内存区域中查找第一次出现字符c的位置,最多查找size单位。
返回:返回位置指针;如果没有出现,返回NULL。
linux内核驱动中对字符串的操作【转】相关推荐
- linux中 字符串,linux内核驱动中对字符串的操作
size_t strlcat(char *dest, const char *src, size_t count) 功能:把src所指字符串的前count个字符添加到dest结尾处(覆盖dest结尾处 ...
- linux 内核驱动中对文件的读写
转载地址 http://www.360doc.com/content/12/1224/10/3478092_255969804.shtml 有时候需要在Linux kernel--大多是在需要调试的驱 ...
- linux内核驱动中对文件的读写 【转】
本文转载自:http://blog.chinaunix.net/uid-13059007-id-5766941.html 有时候需要在Linux kernel--大多是在需要调试的驱动程序--中读写文 ...
- 转:linux内核驱动中_IO, _IOR, _IOW, _IOWR 宏的用法与解析
在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值.cmd除了可区别数字外,还包含有助于处理的几种相应信息. cmd的大小为 32位,共分 4 个 ...
- linux内核驱动中_IO, _IOR, _IOW, _IOWR 宏的用法与解析
在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值.cmd除了可区别数字外,还包含有助于处理的几种相应信息. cmd的大小为 32位,共分 4 个 ...
- Linux内核驱动开发的EXPORT_SYMBOL
前言 很抱歉各位粉丝啊,博主好久没有更新原创文章,从今天起开始恢复写文章的时光.前段时间各种不顺利,到时心情低落.现在恢复状态了. 简介 本文主要来讲讲Linux内核驱动中,EXPORT_SYMBOL ...
- c++ map 初始化_如何调整Linux内核启动中的驱动初始化顺序?
如何调整Linux内核启动中的驱动初始化顺序?[问题] 此处我要实现的是将芯片的ID用于网卡MAC地址,网卡驱动是enc28j60_init. 但是,读取芯片ID的函数,在as352x_afe_ini ...
- Linux内核驱动开发-USB热插拔信息调取
前言: 前段时间上科大嵌入式安卓开发溜了个作业,开发一个驱动,可以实现读取USB热插拔信息,程序调用显示USB设备名称和插拔时间.代码已经放在了我的Github上,供大家参考. 思路: USB热插拔的 ...
- Linux内核驱动之efi-rtc
Linux内核驱动之efi-rtc 1. UEFI与BIOS概述 1.1. BIOS 概述 1.1.1. BIOS缺点: 1.1.2. BIOS的启动流程 1.2 UEFI 概述 1.2.1 Boot ...
最新文章
- 如何使用postman测试流文件_干货|如何用Postman做集成测试
- 新盒模型移动端的排版
- Agile PLM Item Title Block Tab
- java语言显示运算时间_JAVA语言之ACM日期计算:输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天...
- csharp: Aspose.Words create table
- c++ template(4)基本技巧
- 计算机文化基础性考二,电大计算机文化基础形考二答案
- 95-872-055-源码-CEP-Pattern API
- 嵌入式电路设计(linux soc电路设计)
- 大数据的可视化:bigvis包的简单尝试
- 《中国人工智能学会通讯》——7.10 总结和展望
- python yield理解_python教程:迭代器,生成器与for循环机制
- mysql分区替换,MySQL交换分区的实例详解
- 推荐收藏 | 美团技术团队的书单
- 局域网怎么添加新的计算机用户,如何添加局域网
- ESD5401N-2/TR 瞬态电压抑制器 封装DFN1006-2L WILLSEM
- !!!!前方高能预警,省钱。省时。省力。省心.一款神奇的APP......
- 天干地支计算公式_日干支公式速算法,根据阴历或阳历推算日干天干地支方法...
- 安卓基础学习 Day 6|常用控件---列表视图+古诗查看
- 位与:一个数1的结果
热门文章
- linux tid为2的线程,Linux 线程Pthread(一)创建、终止、获取TID
- 高效 遍历 算法_一文学会回溯算法解题技巧
- autocad完全应用指南_2020版AutoCAD软件+操作教程+插件合集,限时3天领
- 计算机技术学 试卷,计算机技术及科学技术学院试卷模板A.doc
- 减少页面加载时间的方法
- c语言状态机实现坐标切换,C语言状态机最优模式(转)
- java栈的底层实现_JVM 底层原理总结
- python object类_Python中一切皆对象,这个对象究竟是什么?
- 20200707:动态规划专题之不同路径
- mysql 临时表循环_在游标循环中查询临时表可以,但是结束循环后就无法查询了。...