- 博客(22)
- 收藏
- 关注
原创 模板语法和目的
模板 C++里面两种编程思想:1.面向对象;2.泛型编程思想 函数模板的语法 template 函数声明或定义 函数模板的目的 对不同类型实现同一功能时的通用性。其中T表示通用的数据类型 举例 #include <iostream> using namespace std; void SwapInt(int &a, int &b) {
2021-11-28 17:11:34
438
原创 2021-11-19 内核几种常见的并发控制机制
内核几种常见的并发控制机制 1.中断屏蔽 2.原子量操作 3.自旋锁基于忙等待的并发控制机制 4.信号量基于阻塞的并发控制机制 5.互斥锁基于阻塞的并发控制机制
2021-11-19 17:59:06
269
原创 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
268
原创 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
367
原创 2021-11-13模块参数,依赖以及模块编程和应用编程区别
内核模块–参数和依赖 1.模块传参 在insmod xxx.ko加载模块时,可以在后面添加参数,类似于应用编程中的主函数传参。只是这里的入口函数没有参数列表,因此参数需要用对应的函数来设置参数,即module_param(接收的全局变量名,传递的参数类型,权限一般为0664)用来传递单个数据,module_param_array(接收的全局变量名,传递的参数类型,存放数组变量大小的地址即&num(当确定传参个数不越界可以写NULL),权限一般为0664)。代码例子如下: #include <l
2021-11-13 18:46:59
1502
原创 2021-11-13内核模块编译
内核模块编译方法 新功能加载 分为静态加载和动态加载两部分。 1.静态加载 将新的驱动代码即.c文件加到内核源码的相应驱动目录下(即同一目录下),并修改同一目录下的Makefile和Kconfig文件,并且在make menuconfig图形化界面下选中该文件<*>,以保证可以编译进内核源码。这种方法在内核启动时候就会运行该驱动代码。 2.动态加载 2.1新功能代码即.c文件放在内核源码的相应驱动目录下(即同一目录下),与静态加载类似,区别在于make menuconfig图形化界面下选中该文件
2021-11-13 10:59:03
987
原创 2021-10-25
虚析构和纯虚析构 多态使用时,如果子类中有属性开辟到堆区,由于父类指针或引用指向子类对象,因此释放父类指针时会造成无法调用子类中的析构代码,即父类指针在析构时,不会调用子类中析构函数,导致子类如果有堆区属性,出现内存泄露。 解决方法:将父类中的析构函数改为虚析构或者纯虚析构 利用虚析构可以解决 父类指针释放子类对象时不干净的问题。 纯虚析构即令虚析构=0进行声明,然后在类的外部需要具体的实现以防父类中有些堆区数据要释放。这一点纯虚析构与纯虚函数不一样,有了纯虚析构之后(就算没有纯虚函数),这个类也属于抽象类
2021-10-25 17:41:36
97
原创 多态中虚函数与纯虚函数
多态中虚函数与纯虚函数 多态是指函数名以及返回类型和参数都一样的函数在派生类中达到不同的功能。 多态的条件:1.继承关系;2.子类中必须重写父类中虚函数。 使用多态要求:父类的指针或者引用指向子类的对象,此时在调用内部虚函数即可。 其中虚函数以及纯虚函数都可以达到这个作用,两者区别在于:虚函数在父类(基类)中可以实现自己的定义,而纯虚函数在父类中直接=0;此外,纯虚函数的类为抽象类无法实例化对象,并且子类中必须重写虚函数,否则子类也无法实例化对象。虚函数的类则可以实例化对象,并且子类中必须重写虚函数才能使用
2021-10-25 16:01:06
200
原创 快速排序-C语言
#include <stdio.h> #define len 10 void quick_sort(int *data, int left, int right) { if (left >= right)
2021-03-12 14:13:08
97
原创 字符串拷贝函数
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
128
原创 常见排序
插入排序,冒泡排序,选择排序 #include <stdio.h> void mySort(int *data, int num) { int temp; int i, j; for (i = 1;
2021-03-10 10:25:06
108
原创 Linux并发程序设计习题
Linux并发程序设计习题 1、路由器是根据哪一层的信息为数据包选择路由 ( C ) A 物理层 B 数据链路层 C 网络层 D 传输层 2、只用于同一主机内部进程间通信的socket应使用的协议族是 ( B ) A AF_INET B AF_UNIX C AF_NS D AF_IMPLINK 3、在下列功能中,哪一个最好地描述了OSI(开放系统互连)模型的数据链路层( B ) A 保证数据正确的顺序、无错和完整 B 处理信号通过介质的传输 C 提供用户与网络的接口 D 控制报文通过
2021-02-06 20:46:30
1618
1
原创 ARM系统移植习题
ARM系统移植 1、ARM的Cortex-A处理器总共__40__个寄存器,System模式下使用__17__个寄存器。 2、在用ARM汇编编程是,其寄存器有多个别名,通常PC是指_R15_,LR 是指__R14__,SP是指__R13__。 3、ARM嵌入式系统中,PC指向的是正在( 执行 )的指令地址。 4、下列二进制工具哪个是用来把程序地址转换为文件名和行号的( D ) A nm B objdump C objcopy D addr2line 5、当console初始化以后,一般最为简单的
2021-02-04 20:17:38
1094
1
原创 进程间通讯--有名管道
有名管道特点 1.对应管道文件,可用于任意进程间进行通讯 2.打开管道时可指定读写方式 3.通过文件IO操作,内容存放在内存中 有名管道创建–mkfifo #include <unistd.h> #include <fcntl.h> int mkfifo(const char* path, mode_t mode); 1.成功时返回0,失败时返回EOF 2.path创建的管道文件路径,之后可对文件进行读写 3.mode管道文件的权限,如0666 代码示例 写程序 #include
2020-12-15 21:16:47
142
原创 进程间通讯--无名管道
无名管道介绍,创建与使用 首先进程间通讯方式共有以下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
160
原创 主机与服务器ssh连接
主机与服务器ssh连接 1.主机ping虚拟机可以ping通 2.虚拟机ping主机可以ping通 3.然后再虚拟机输入ssh localhost出现如下所示,说明虚拟机没有安装ssh 4.输入sudo apt-get install sshopen-server 5.安装完后输入ps -e|grep ssh 出现sshd字样则说明开启成功 6.然后进行连通即可,如果还是无法连通,那么需要配置/etc/ssh/sshd_config文件,输入:vi(vim) /etc/ssh/sshd_config
2020-11-03 22:29:21
562
原创 Ubuntu软件安装 apt-get是什么?
apt-get是什么? 1.是一条Linux命令 2.从网络搜索下载软件 3.更新,安装,卸载,下载等 4.管理软件依赖关系 /etc/apt/sources.list 软件源服务器配置 /var/lib/apt/lists/* 存放服务器资源列表 /var/cache/apt/archives/ 本地缓存目录 下载软件 apt-get {update | upgrade | install | remove | dowload | clean} update是把云服务器中最新列表更新到服务器
2020-11-02 23:02:40
253
原创 Linux中samba安装与使用
Linux中samba安装与使用 使用apt-get install samba进行安装 vi /etc/samba/smb.conf 在smb.conf后面加上如下内容,我的是加了两个路径(根据自己的共享目录改变path路径即可,comment可有可无,其余不用变) [root] comment = this is linux share directory root path = /root/share/ public = yes browseable = yes writable = ye
2020-11-02 22:28:40
125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人