Linux
Peter9412
一个比较菜的程序员
展开
-
模板语法和目的
模板C++里面两种编程思想:1.面向对象;2.泛型编程思想函数模板的语法template函数声明或定义函数模板的目的对不同类型实现同一功能时的通用性。其中T表示通用的数据类型举例#include <iostream>using namespace std;void SwapInt(int &a, int &b) {原创 2021-11-28 17:11:34 · 375 阅读 · 0 评论 -
2021-11-19 内核几种常见的并发控制机制
内核几种常见的并发控制机制1.中断屏蔽2.原子量操作3.自旋锁基于忙等待的并发控制机制4.信号量基于阻塞的并发控制机制5.互斥锁基于阻塞的并发控制机制原创 2021-11-19 17:59:06 · 201 阅读 · 0 评论 -
2021-11-14注册字符设备和字符设备驱动
注册字符设备首先应该定义两个结构体:1.字符设备结构体,2.对应文件操作的结构体1.字符设备结构体如下:struct cdev{ struct kobject kobj;//表示该类型实体是一种内核对象 struct module *owner;//填THIS_MODULE,表示该字符设备从属于哪个内核模块 const struct file_operations *ops;//指向空间存放着针对该设备的各种操作函数地址 struct list_head list;//链表指针域 dev_原创 2021-11-14 15:59:09 · 220 阅读 · 0 评论 -
2021-11-14字符设备驱动基础
字符设备驱动基础1.Linux内核对设备的分类分为七类文件种类:1.-:普通文件 2.d:目录文件 3.p:管道文件 4.s:本地socket文件 5.l:链接文件 6.c:字符设备 7.b:块设备上述7类中的1,2,5三种在外存中是有具体的内容,即包含文件内容,文件名和元信息inode(元信息是指时间戳或者大小等信息)三种信息,并且其中5链接文件中的软链接直接指向文件,其文件内容是指向的地址,而硬链接是指文件内容和元信息是用的同一个,但是文件名又创建了一个(即起了一个别名)。而上述的其余四类在外存中原创 2021-11-14 12:58:52 · 327 阅读 · 0 评论 -
2021-11-13模块参数,依赖以及模块编程和应用编程区别
内核模块–参数和依赖1.模块传参在insmod xxx.ko加载模块时,可以在后面添加参数,类似于应用编程中的主函数传参。只是这里的入口函数没有参数列表,因此参数需要用对应的函数来设置参数,即module_param(接收的全局变量名,传递的参数类型,权限一般为0664)用来传递单个数据,module_param_array(接收的全局变量名,传递的参数类型,存放数组变量大小的地址即&num(当确定传参个数不越界可以写NULL),权限一般为0664)。代码例子如下:#include <l原创 2021-11-13 18:46:59 · 1432 阅读 · 0 评论 -
2021-11-13内核模块编译
内核模块编译方法新功能加载分为静态加载和动态加载两部分。1.静态加载将新的驱动代码即.c文件加到内核源码的相应驱动目录下(即同一目录下),并修改同一目录下的Makefile和Kconfig文件,并且在make menuconfig图形化界面下选中该文件<*>,以保证可以编译进内核源码。这种方法在内核启动时候就会运行该驱动代码。2.动态加载2.1新功能代码即.c文件放在内核源码的相应驱动目录下(即同一目录下),与静态加载类似,区别在于make menuconfig图形化界面下选中该文件原创 2021-11-13 10:59:03 · 877 阅读 · 0 评论 -
快速排序-C语言
#include <stdio.h> #define len 10void quick_sort(int *data, int left, int right){ if (left >= right)原创 2021-03-12 14:13:08 · 62 阅读 · 0 评论 -
字符串拷贝函数
char *myStrcpy(char *strDest, const char *strSrc){ assert((strDest != NULL) && (strSrc != NULL)); char *address = strDest; while((*strDest++ = *strSrc++) != '\0'); return address;}原创 2021-03-11 10:14:20 · 83 阅读 · 0 评论 -
常见排序
插入排序,冒泡排序,选择排序#include <stdio.h> void mySort(int *data, int num){ int temp; int i, j; for (i = 1;原创 2021-03-10 10:25:06 · 53 阅读 · 0 评论 -
Linux根据关键字查找所在文件
grep “关键字” -r 搜索目录grep “add” -r ./Downloads/test/原创 2021-02-22 13:10:09 · 1348 阅读 · 0 评论 -
Linux并发程序设计习题
Linux并发程序设计习题1、路由器是根据哪一层的信息为数据包选择路由 ( C )A 物理层B 数据链路层C 网络层D 传输层2、只用于同一主机内部进程间通信的socket应使用的协议族是 ( B )A AF_INETB AF_UNIXC AF_NSD AF_IMPLINK3、在下列功能中,哪一个最好地描述了OSI(开放系统互连)模型的数据链路层( B )A 保证数据正确的顺序、无错和完整B 处理信号通过介质的传输C 提供用户与网络的接口D 控制报文通过原创 2021-02-06 20:46:30 · 1492 阅读 · 1 评论 -
ARM系统移植习题
ARM系统移植1、ARM的Cortex-A处理器总共__40__个寄存器,System模式下使用__17__个寄存器。2、在用ARM汇编编程是,其寄存器有多个别名,通常PC是指_R15_,LR 是指__R14__,SP是指__R13__。3、ARM嵌入式系统中,PC指向的是正在( 执行 )的指令地址。4、下列二进制工具哪个是用来把程序地址转换为文件名和行号的( D )A nmB objdumpC objcopyD addr2line5、当console初始化以后,一般最为简单的原创 2021-02-04 20:17:38 · 977 阅读 · 0 评论 -
进程间通讯--有名管道
有名管道特点1.对应管道文件,可用于任意进程间进行通讯2.打开管道时可指定读写方式3.通过文件IO操作,内容存放在内存中有名管道创建–mkfifo#include <unistd.h>#include <fcntl.h>int mkfifo(const char* path, mode_t mode);1.成功时返回0,失败时返回EOF2.path创建的管道文件路径,之后可对文件进行读写3.mode管道文件的权限,如0666代码示例写程序#include原创 2020-12-15 21:16:47 · 80 阅读 · 0 评论 -
进程间通讯--无名管道
无名管道介绍,创建与使用首先进程间通讯方式共有以下7种:早期Unix进程间通信方式3种1.无名管道(pipe)2.有名管道(fifo)3.信号(signal)System V IPC,3种4.共享内存(share memory)5.消息队列(message queue)6.信号灯集(semaphore set)7.套接字本次只介绍无名管道,后期会陆续记录所有通信方式无名管道具有以下特点:1.只能用于具有亲缘关系的进程之间的通讯(父子或兄弟进程)2.弹弓的通信模式,具有固定的读端和原创 2020-12-15 18:34:05 · 120 阅读 · 0 评论