自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(214)
  • 收藏
  • 关注

原创 linux内核开发第7讲:linux内核源码编译过程

【代码】linux内核开发第7讲:linux内核源码编译过程。

2023-04-26 23:23:38 367 1

原创 linux内核开发第6讲:应用层的write怎么样调用到驱动里的write

【代码】linux内核开发第6讲:应用层的write怎么样调用到驱动里的write。

2023-04-25 23:29:30 536

原创 linux内核开发第5讲:字符设备驱动的Makefile和驱动的插入和卸载

KDIRM。

2023-04-20 23:44:38 771

原创 linux 0.11内核代码 bootset.s

【代码】linux 0.11内核代码 bootset.s。

2023-04-13 22:56:24 139

原创 linux内核开发第4讲:编写最简单的字符设备驱动

【代码】linux内核开发第4讲:编写最简单的字符设备驱动。

2023-04-07 23:45:48 93

原创 linux内核开发第3讲:linux内核源码各个目录的功能解说

linux源码大概800M,其中一半多是驱动(driver)相关代码,还有网络子系统(net),块设备子系统(block)内核核心代码,体系相关的代码,内核编译过程的代码等。

2023-04-05 00:38:01 313

原创 linux内核开发50讲学习笔记

【代码】linux内核开发50讲学习笔记。

2023-04-03 23:30:30 61

原创 linux 0.11 内核代码

【代码】linux 0.11 内核代码。

2023-04-02 23:16:52 88

原创 操作系统的引导与启动程序

我们整个系统内存,它是这样子的一个长条,不是全部用于整个用户内存,它有这么三个分区;第一个分区是内核代码运行内存,第二个是高速缓冲区,第三个是主内存(用户内存)。高速缓冲区检索是一个哈希表加上循环链表。操作系统每次读硬盘很累,当向硬盘中写数据时,每次写完成了,并不是写到硬盘中,而是写到内存中,然后内存再和硬盘做交互。操作系统写的区域就是高速缓冲区。

2023-04-01 18:46:38 458

原创 makefile

【代码】makefile。

2023-03-27 22:59:12 474

原创 git使用

git使用命令记录

2023-02-22 22:15:25 59

原创 ffmpeg——简单播放器代码

ffmpeg——简单播放器介绍

2022-07-09 23:38:12 742

原创 Ubuntu下的git使用指南

1.创建账号,绑定邮箱在Git或者Gitee中创建一个Git账号或者Gitee账号,绑定邮箱,Ubuntu下的git命令对Git或者Gitee都有效。2.安装gitUbuntu下下载git命令:sudo apt-get install git在下载完之后,可以通过git --version查看git安装版本;3.全局配置安装git之后,需要对git进行全局配置,即配置用户名和账户。配置用户名命令(这个用户名可以随意起):git config --global uesr.name "zha

2022-05-06 19:56:27 4285

原创 Ubuntu下进行截图的快捷方式

shift+Fn+PRT SC截图结果保存在用户下的相册中

2022-05-05 23:33:51 134

原创 tdms打开闪退问题

问题:tdms打开闪退解决方法如下,打开excel,在菜单栏中点【文件】 左下方进入【选项】,然后在excel选项中点击【加载项】 然后在下方的管理,选择【COM加载项】,点击【转到】 将NI的TDMS【Add-in】的打勾,点击确定即可。然后双击tdms文件就能打开了。...

2021-12-18 16:44:17 909 1

原创 设计模式1——设计模式的原则

1.从面向对象说起      ~~~~~~      变化是代码复用的天敌,面向对象的设计语言的优势就是抵御变化!这里的所谓抵御变化,不是说采用面向对象的设计语言,就没有变化,而是将变化的范围降到最小。      ~~~~~~      之前我们所认识的面向对象的语言

2021-08-29 22:36:01 95

原创 linux——select、poll、epoll

文章目录1.多路I/O转接服务器2.select1.多路I/O转接服务器多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。2.select#include <sys/select.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>int select(int nfds, fd_se

2021-08-23 17:23:58 120

原创 面试题——面经题目(1)

文章目录1. 进程调度算法2.操作系统在调度线程时会做哪些事情3.页面置换算法4.32位系统,64位的系统内存是多大5.CPU的GHz是什么意思1. 进程调度算法进程调度规定了CPU执行就绪队列中的多个进程的顺序。1.先来先服务 (FCFS,first come first served)2.最短作业优先(SJF, Shortest Job First)3.最高响应比优先法(HRRN,Highest Response Ratio Next)响应比R定义如下: R =(W+T)/T

2021-07-18 19:32:42 155 1

原创 数据结构与算法——动态规划

文章目录1.内容概述2.爬楼梯1.内容概述2.爬楼梯

2021-07-16 16:15:23 188 3

原创 设计模式——抽象工厂

文章目录1.“对象创建”模式2.动机(Motivation)3.模式定义4.要点总结5.代码对比1.“对象创建”模式通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式•Factory Method•Abstract Factory•Prototype•Builder2.动机(Motivation)在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,

2021-07-12 16:51:12 67

原创 设计模式——工厂模式

文章目录1.“对象创建”模式2.动机(Motivation)3.模式定义4.要点总结5.代码对比1.“对象创建”模式通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式•Factory Method•Abstract Factory•Prototype•Builder2.动机(Motivation)在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经

2021-07-12 14:29:14 64

原创 设计模式——桥模式

文章目录

2021-07-12 13:43:30 51

原创 linux——线程通信(2)

文章目录1.条件变量1.1 条件变量函数:1.2 pthread_cond_init 函数1.3 pthread_cond_destroy 函数1.4 pthread_cond_wait 函数1.5 pthread_cond_timedwait 函数1.6 pthread_cond_signal 函数1.7 pthread_cond_broadcast 函数1.条件变量条件变量本身不是锁!但它也可以造成线程阻塞。通常与互斥锁配合使用。给多线程提供一个会合的场所。1.1 条件变量函数:pthread

2021-07-08 15:04:49 274

原创 linux——线程通信(1)

文章目录1.同步概念2.线程同步3.数据混乱原因:4.互斥量 mutex5.主要应用函数:5.1 pthread_mutex_init 函数5.2 pthread_mutex_destroy 函数5.3 pthread_mutex_lock 函数5.4 pthread_mutex_unlock 函数5.5 pthread_mutex_trylock 函数5.6 加锁与解锁5.7 lock 与 trylock:1.同步概念所谓同步,即同时起步,协调一致。不同的对象,对“同步”的理解方式略有不同。如,设备

2021-07-07 10:53:43 166

原创 linux——线程(2)

文章目录1.pthread_join 函数2.pthread_detach 函数3.pthread_cancel 函数4.终止线程方式5.控制原语对比6.线程属性7.线程属性初始化8.线程的分离状态9.线程使用注意事项1.pthread_join 函数阻塞等待线程退出,获取线程退出状态 其作用,对应进程中 waitpid() 函数。int pthread_join(pthread_t thread, void **retval); 成功:0;失败:错误号参数:thread:线程 ID (【注

2021-07-06 11:26:48 134 1

原创 linux——线程(1)

文章目录1.线程概念1.1 什么是线程1.2 线程和进程区别1.3 线程实现原理1.4 三级映射1.5 线程共享资源1.6 线程非共享资源1.7 线程优、缺点2.线程控制原语2.1 pthread_self 函数2.2 pthread_create 函数3.线程与共享3.1 线程共享全局变量4.线程退出4.1 pthread_exit 函数1.线程概念1.1 什么是线程线程:LWP(light weight process), 轻量级的进程,本质仍是进程(在 Linux 环境下)。线程是进程的子任务

2021-07-06 10:21:16 110

原创 数据结构与算法——搜索

文章目录1.内容概述2.岛屿数量2.1 题目描述1.内容概述2.岛屿数量2.1 题目描述给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"],

2021-07-05 11:29:48 127

原创 数据结构与算法——排序

文章目录1.冒泡排序2.选择排序3.插入排序4.快速排序5.堆排序6.归并排序7.希尔排序1.冒泡排序将一个数组从小到大排序,一次循环(从头开始遍历,将相邻的两个数值比较,如果前面一个大于后面的数字,交换这两个数字)可以将循环数组中的最大值放在最后面,经过多次冒泡就可以完成排序#include<iostream>#include<iostream>#include<vector>using namespace std;//1.冒泡算法vector&

2021-07-02 20:42:04 137

转载 TCP三次握手和四次挥手通俗理解

一、TCP报文格式在了解三次握手和四次挥手之前,先知道TCP报文内部包含了哪些东西。1 TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。TCP在发送数据前必须在彼此间建立连接,这里连接意思是:双方需要内保存对方信息(例如:IP,Port…)2 报文主要段的意思序号:表示发送的数据字节流,确保TCP传输有序,对每个字节编号确认序号:发送方期待接收的下一序列号,接收成功后的数据字节序列号加 1。只有ACK=1时才有效。ACK:确认序号的标志,ACK=1表示确

2021-06-29 20:24:25 201

原创 C++学习——set与map

1.set的使用set的各成员函数列表如下:1. begin()--返回指向第一个元素的迭代器2. clear()--清除所有元素3. count()--返回某个值元素的个数4. empty()--如果集合为空,返回true5. end()--返回指向最后一个元素的迭代器6. equal_range()--返回集合中与给定值相等的上下限的两个迭代器7. erase()--删除集合中的元素8. find()--返回一个指向被查找到元素的迭代器9. get_allocato

2021-06-24 13:21:18 826

原创 C++学习——C++中的四个智能指针

C++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被11弃用。为什么要使用智能指针:智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动.

2021-06-23 20:23:00 118

原创 C++学习——C++中的四种类型转换

文章目录1.dynamic_cast2.const_cast3.3 static_cast3.4 reinterpret_cast1.dynamic_cast用于动态类型转换。只能用于含有虚函数的类,用于类层次间的向上和向下转化。只能转指针或引用。向下转化时,如果是非法的对于指针返回NULL,对于引用抛异常。要深入了解内部转换的原理。向上转换:指的是子类向基类的转换向下转换:指的是基类向子类的转换它通过判断在执行到该语句的时候变量的运行时类型和要转换的类型是否相同来判断是否能够进行向下转

2021-06-23 17:36:37 116

原创 C++学习——拷贝构造函数和移动构造函数

文章目录1.拷贝构造函数2.移动构造函数1.拷贝构造函数拷贝构造函数,它是一种特殊的构造函数。它的作用就是用一个已经生成的对象来初始化另一个同类的对象。当类中拥有指针类型的成员变量时,拷贝构造函数中需要以深拷贝(而非浅拷贝)的方式复制该指针成员。浅复制仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变。深复制在计算机中开辟了一块新的内存地址用于存放复制的对象。浅层复制之所以危险,是因为两个指针共同指向一片内存空间,若第一个指针将其释放,另一个指针的指向

2021-06-20 19:35:12 997

原创 C++学习——继承

文章目录1.C++中类成员的访问权限和继承权限问题2.多继承的优缺点3. 继承机制中对象之间如何转换4.组合与继承优缺点1.C++中类成员的访问权限和继承权限问题三种访问权限public:用该关键字修饰的成员表示公有成员,该成员不仅可以在类内可以被访问,在类外也是可以被访问的,是类对外提供的可访问接口;private:用该关键字修饰的成员表示私有成员,该成员仅在类内可以被访问,在类体外是隐藏状态;protected:用该关键字修饰的成员表示保护成员,保护成员在类体外同样是隐藏状态,但

2021-06-20 17:48:25 65

原创 C++学习——抽象类

文章目录1.抽象类1.1 什么是抽象类?1.2 抽象类的作用?1.3 使用抽象类时注意2.抽象基类为什么不能创建对象?1.抽象类1.1 什么是抽象类?带有纯虚函数的类为抽象类1.2 抽象类的作用?抽象类的主要作用是将有关的操作作为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实现在其基类中作为接口的操作。所以派生类实际上刻画了一组子类的操作接口的通用语义,这些语义也传给子类,子类可以具体实现这些语义,也可以再将这些语义传给自己的子类。1.3 使用抽象类时注

2021-06-20 17:13:29 1466

转载 C++学习——默认构造函数

默认构造函数在这篇博客中已经写得很明白。https://blog.csdn.net/bear_n/article/details/72798301文章目录1.什么是默认构造函数?2.什么情况会自动生成默认构造函数,即编译器生成默认构造函数?1.什么是默认构造函数?默认构造函数是可以不用实参进行调用的构造函数,它包括了以下两种情况:没有带明显形参的构造函数。提供了默认实参的构造函数。 类设计者可以自己写一个默认构造函数。编译器帮我们写的默认构造函数,称为“合成的默认构造函数”。2..

2021-06-20 16:41:19 103

原创 C++学习——构造函数,析构函数与虚函数关系

文章目录1.构造函数,析构函数可以为虚函数吗?2.析构函数和构造函数的作用?3.构造函数和析构函数调用顺序?1.构造函数,析构函数可以为虚函数吗?构造函数不可以,析构函数可以从存储空间角度,虚函数相应一个指向vtable虚函数表的指针,这大家都知道,但是这个指向vtable的指针事实上是存储在对象的内存空间的。问题出来了,假设构造函数是虚的,就须要通过 vtable来调用,但是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。从使用角度,虚函数主要用于在

2021-06-20 16:32:10 375

原创 C++学习——类的初始化

文章目录1.类通过构造函数进行数据成员初始化2.类成员初始化方式?3.什么情况下必须使用列表初始化?4.为什么用列表初始化成员变量会快一些?5.派生类构造函数的执行顺序1.类通过构造函数进行数据成员初始化一般来说,类中的数据成员是私有的,不能通过对象共有访问的方式对数据成员赋初始值。一般来说,构造函数就是用来用来在创建对象时初始化对象, 为对象数据成员赋初始值。构造函数是类的一种特殊成员函数,不需要人为调用,而是在建立对象时自动被执行。2.类成员初始化方式?赋值初始化,通过在函数体内进行赋值初始化

2021-06-20 15:42:20 14667 1

原创 C++学习——内联函数

文章目录1.内联函数1.1 什么是内联函数1.2 内联函数的声明1.3 内联函数的条件2.成员函数与内联函数2.1 内联成员函数2.2 判断成员函数时候为内联函数3. 虚函数可以声明为inline吗1.内联函数1.1 什么是内联函数C++提供一种提高函数效率的方法,即在编译时将被调函数的代码直接嵌入到主调函数中,取消调用这个环节。这种嵌入到主调函数中的函数称为内联函数(inline function)。1.2 内联函数的声明在函数定义的类型前加上inline修饰符,定义形式为:inline 返

2021-06-17 15:28:49 729

原创 C++学习——c语言和C++语言中的struct

C语言struct和C++struct区别C语言中:struct是用户自定义数据类型(UDT);C++中struct是抽象数据类型(ADT),支持成员函数的定义,(C++中的struct能继承,能实现多态)。C中struct是没有权限的设置的,且struct中只能是一些变量的集合体,可以封装数据却不可以隐藏数据,而且成员不可以是函数。C++中,struct的成员默认访问说明符为public(为了与C兼容),class中的默认访问限定符为private,struct增加了访问权限,且可以和类

2021-06-17 15:00:37 554

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除