转自:http://www.360doc.com/content/12/1224/10/3478092_255969530.shtml

Linux内核中关于字符串的相关操作,首先包含头文件:

  1. #include <linux/string.h>

可用函数包括如下:
lib/string.c

  1. int strnicmp(const char *s1, const char *s2, size_t len)
  2. int strcasecmp(const char *s1, const char *s2)
  3. int strncasecmp(const char *s1, const char *s2, size_t n)
  4. char *strcpy(char *dest, const char *src)
  5. char *strncpy(char *dest, const char *src, size_t count)
  6. size_t strlcpy(char *dest, const char *src, size_t size)
  7. char *strcat(char *dest, const char *src)
  8. char *strncat(char *dest, const char *src, size_t count)
  9. size_t strlcat(char *dest, const char *src, size_t count)
  10. int strcmp(const char *cs, const char *ct)
  11. int strncmp(const char *cs, const char *ct, size_t count)
  12. char *strchr(const char *s, int c)
  13. char *strrchr(const char *s, int c)
  14. char *strnchr(const char *s, size_t count, int c)
  15. char *skip_spaces(const char *str)
  16. char *strim(char *s)
  17. size_t strlen(const char *s)
  18. size_t strnlen(const char *s, size_t count)
  19. char *strpbrk(const char *cs, const char *ct)
  20. char *strsep(char **s, const char *ct)
  21. bool sysfs_streq(const char *s1, const char *s2)
  22. void *memset(void *s, int c, size_t count)
  23. void *memcpy(void *dest, const void *src, size_t count)
  24. void *memmove(void *dest, const void *src, size_t count)
  25. int memcmp(const void *cs, const void *ct, size_t count)
  26. void *memscan(void *addr, int c, size_t size)
  27. char *strstr(const char *s1, const char *s2)
  28. char *strnstr(const char *s1, const char *s2, size_t len)
  29. 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内核驱动中对字符串的操作【转】的更多相关文章

  1. 嵌入式C语言自我修养 02:Linux 内核驱动中的指定初始化

    2.1 什么是指定初始化 在标准 C 中,当我们定义并初始化一个数组时,常用方法如下: ] = {,,,,,,,,}; 按照这种固定的顺序,我们可以依次给 a[0] 和 a[8] 赋值.因为没有对 a ...

  2. linux内核驱动中对文件的读写 【转】

    本文转载自:http://blog.chinaunix.net/uid-13059007-id-5766941.html 有时候需要在Linux kernel--大多是在需要调试的驱动程序--中读写文 ...

  3. linux内核驱动中_IO, _IOR, _IOW, _IOWR 宏的用法与解析

    在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值.cmd除了可区别数字外,还包含有助于处理的几种相应信息. cmd的大小为 32位,共分 4 个 ...

  4. linux内核驱动中_IO, _IOR, _IOW, _IOWR 宏的用法与解析(引用)

    在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值.cmd除了可区别数字外,还包含有助于处理的几种相应信息. cmd的大小为 32位,共分 4 个 ...

  5. Windows内核驱动中操作文件

    本页主题:如何在windows内核驱动中对文件操作,实现对文件的拷贝.粘贴.删除.查询信息等,这是很常用也是很简单的方法. 部分内容参考:http://www.cppblog.com/aurain/a ...

  6. linux内核驱动模型

    linux内核驱动模型,以2.6.32内核为例.(一边写一边看的,有点乱.) 1.以内核对象为基础.用kobject表示,相当于其它对象的基类,是构建linux驱动模型的关键.具有相同类型的内核对象构 ...

  7. Unix/Linux环境C编程新手教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRjYXN0Y3Bw/font/5a6L5L2T/font ...

  8. Linux设备驱动中的阻塞和非阻塞I/O

    [基本概念] 1.阻塞 阻塞操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件后再进行操作.被挂起的进程进入休眠状态(不占用cpu资源),从调度器的运行队列转移到等待队列,直到 ...

  9. Unix/Linux环境C编程入门教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. 2.选择默认虚拟机 3.选择稍后安装操作系统 4.选择linux  opensuse 5. 选择默认虚拟机名称 6.设置处理器为双核. 7.内存设置为2 ...

随机推荐

  1. 【转】C语言字符串与数字相互转换

    在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串.字符串是以“\0”作为结束符.C/C++提供了丰富的字符串处理函数,下面列出了几个最常用的函数. ● 字符串输出函数puts. ● ...

  2. 使用ntlmrelayx在任何地方进行中继凭据

    0x00 前言 通过Fox-IT我们可以让客户了解其企业组织中出现的常见安全风险.当攻击者可以利用NT LAN Manager身份验证协议(以下简称:NTLM身份验证)时,凭据重用就有这样的风险,即这 ...

  3. 【CH5105】cookies 贪心+DP

    通过邻项交换法可知,怨气值大的孩子分得的饼干数也应该多(否则交换之后得到的解更优). 观察目标函数的性质,可知目标函数本身是由孩子饼干数的相对大小得到,因此此题中关注的是相对大小. 状态设计:\(dp ...

  4. 初探typescript

    学习任何知识都不是一蹴而就的.typescript也是如此.今天我们来初步的了解一下typescript的安装与编译.以及基础的语法知识. 第一步:安装ts 第二步:在安装好的文件夹里面,写上ts文件 ...

  5. Jenkins创建job时Check-out Strategy各个选项详细说明(含图)

    Check-out Strategy 第一次build 第n次build(除第一次) Use 'svn update' as much as possible 将workspace下的所有文件清空,然 ...

  6. SQL Server 一句Sql把表结构全部查询出来

    --一句Sql把表结构全部查询出来 SELECT 表名 = Case When A.colorder=1 Then D.name Else '' End, 表说明 = Case When A.colo ...

  7. python的异常处理try/except 万能处理exception

    1.try方式 try: age=int(input(">>>")) int(age)#主逻辑 num=input(">>>>& ...

  8. HTML的前世今生

    HTML的基础知识扫盲 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 三年前,我就听周围的一些工程师说,python就是一个脚本语言,没啥好学的,学JAVA吧,python能干的J ...

  9. python---自定义字段验证

    各个字段类,含正则和验证方法 #字段类 class IPField: REGULAR = "^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4] ...

  10. 关于同步,异步,阻塞,非阻塞,IOCP/epoll,select/poll,AIO ,NIO ,BIO的总结

    相关资料 IO基本概念 Linux环境 同步异步阻塞非阻塞 同步与异步 阻塞与非阻塞 IO模型Reference Link 阻塞IO模型 非阻塞IO模型 IO复用模型 信号驱动异步IO模型 异步IO模 ...