- 博客(6)
- 收藏
- 关注
原创 正则表达式
基础正则 cat -A //查找文件结尾符号是否有空格 grep -n //显示文件行数 grep -v //去除空行 grep -i //不区分大小写 '^ xyz'//找出以xyz为开头得某一行 'xyz$' //找出以xyz为结尾得某一行 '^$' //找出空行(不包括空格) '.' //找出任何一个字符(不匹配空行) 'xyz*' //连续出现xyz得行(>=0 次) '\' //转义字符 grep '\.$'找出所有以.结尾得行 '^.*xyz' //正则贪婪性 [xyz] //
2022-04-04 18:45:01
290
原创 内核链表使用
内核链表是Linux 内核中最常用的数据结构,代码位于 内核/include/linux/list.h 下 ,此代码是可以在应用程序进行编译直接使用的,因此当我们想要设计链表时可以直接使用此代码。 定义一个链表头 struct list_head *list; 初始化链表头 INIT_LIST_HEAD(list)//list为链表头 正向插入链表节点 list_add(&new_list,list)//new_list 待插入的链表节点, list 链表头 反向插入链表节点 list_add
2022-01-24 09:59:36
846
原创 mmap使用
linux进程虚拟地址空间中存在一段称为mmap的内存区,当申请用户内存较大时,如大于128kb,系统一般会通过mmap系统调用直接映射一片内存区,使用结束后再通过ummap系统调用归还。关于mmap的原理网上有很多文档,这里不再赘述,主要给出驱动程序如何编写mmap函数,并通过缺页异常形式进行具体页的映射,具体参考这位博主: https://blog.youkuaiyun.com/xxxxxlllllxl/article/details/17303231, 博文中使用kmalloc分配内存,在物理地址上连续,这里使用
2022-01-24 09:25:11
653
原创 回调函数示例
回调函数对于应用开发者涉及不多,但是对于系统级开发者应当是必须了解的,关于回调函数可以简单的认为是自己在程序里写了一个函数但是这个函数需要通过指针方式传递给库进行调用,下面是回调函数的简单示例: #include <stdio.h> struct stu{ char name[10]; }; struct stu stu1; typedef void (*pFun)(void *pstr,int a); //函数指针 int ret=0; pFun pf; void dofun(
2022-01-04 10:18:31
894
原创 可变参数打印·
对于变参函数,编译器或操作系统一般会提供一些宏给程序员使用,用来解析函数的参数列表,这样程序员就不用自己解析了,直接调用封装号的宏即可获取参数列表。编译器提供的宏有一下三种。 va_list: 定义再编译器头文件stdarg.h中 va_start(fmt,args):根据参数args的地址,获取args后面参数的地址,并保存再fmt指针变量中 va_end(args):释放args指针,并将其复制位NULL ...
2021-12-10 14:28:38
857
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅