自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【linux】共享内存

1.shmget//创建共享内存key为用户给操作系统来标识共享内存的标识符,方便另一个进程来找到共享内存size为共享内存大小shmflg 创建共享内存的方式,位图形式返回shmid操作系统给用户的对应共享内存的操作符,用来对共享内存进行操作,比如说要释放共享内存,给shmctl函数传参shmid,要查看对应共享内存的属性,给shmctl也要传shmid2.ftok//产生一个随机值key,保证共享内存的唯一性pathname :路径字符串(任意)proj_id:任意数值。

2024-04-30 13:15:48 311

原创 【linux】命名管道

首先认识一个函数,他可以形成一个命名管道第一个参数是新建的命名管道放在哪个路径下的路径字符串,第二个参数为该文件的打开权限同时shell提供指令 mkfifo +命名管道名也能形成管道,会新建在当前路径下unlink函数实现删除管道参数为命名管道文件的所在路径。

2024-04-29 15:29:45 265

原创 【c++】set|map

1.set在底层是用二叉搜索树(红黑树)实现的。2.与map/multimap不同,map/multimap中存储的是真正的键值对,set中只放value,但在底层实际存放的是由构成的键值对。3.set中插入元素时,只需要插入value即可,不需要构造键值对。4.set中的元素不可以重复(因此可以使用set进行去重)。5使用set的迭代器遍历set中的元素,可以得到有序序列log2nlog_2 nlog2​n。

2024-04-27 12:17:12 710

原创 【linux】匿名管道|进程池

1.进程为什么要通信?进程也是需要某种协同的,所以如何协同的前提条件(通信)通信数据的类别:1.通知就绪的2.单纯的数据3.控制相关的信息2.进程如何通信?进程间通信,成本会高一点进程间通信的前提,先让不同的进程,看到同一份(资源,一段内存)一定是某一个进程需要通信,让os创建一个共享资源os必须提供很多的系统调用,os创建的共享资源不同,系统调用接口不同,进程间通信会用不同的种类3.进程通信的常见方式是什么?消息队列共享内存信号量。

2024-04-23 18:39:09 795

原创 【c++】多态

虚函数表// 这里常考一道笔试题:sizeof(Base)是多少?int main()为什么是8呢?虚函数表的继承class Basepublic:private:int _b = 1;Derive d;return 0;

2024-04-20 15:01:35 987

原创 【c++】继承

下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。

2024-04-14 19:01:05 1224

原创 【c++】模板进阶

定义一个数组类1000我们需要两个对象,分别数组大小为10,和1000的话,只用上面一个类是不够的,两个类给不同的N值.这里我们可以用非类型模板参数来解决这个问题,只需要一个类。在这之前有一个知识点1000size(1);//这里故意写错,但是在实例化st1,它只对要用的函数实例化,并不会检查其他类成员函数内部有没有错误。在operator[]中,size(1);//这里故意写错,就不会报错。而编译器只会对大体的结构进行检查,比如说哪个类成员函数少一个分号。

2024-04-11 22:49:55 1041

原创 【c++】优先级队列|反向迭代器(vector|list)

int _month;int _day;while (!st.pop();如果我们把地址放进优先级队列里面呢??while (!st.pop();这里为什么排序是无序的呢??

2024-04-09 17:06:46 465

原创 【c++】二叉搜索树

二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二叉树的中序遍历就相当于从小往大排序。

2024-04-08 22:57:57 1026

原创 【linux】重定向|缓冲区

将文件标识符为fd的文件内容读到buf中去,读count个,read的返回值是实际读到的个数,有可能文件中没有count个,但是read返回的还是实际读到的个数。

2024-04-04 17:47:50 912 2

原创 【linux】进程替换的应用|shell解释器的实现

当我们学过了进程替换之后,本篇文章可以根据进程替换的知识带你自主实现一个shell命令行实现步骤1.显示命令行提示2.读取输入指令以及对应选项3.分割第二步的指令以及选项到命令行参数表中4.处理内建命令5.进程替换。

2024-03-31 14:54:27 1210 6

原创 【linux】基础IO |文件操作符

需要掌握:操作文件,本质:进程操作文件。进程和文件的关系向文件中写入,本质上向硬件中写入->用户·没有权利直接写入->操作系统是硬件的管理者,我们可以通过操作系统往硬件写入->操作系统必须提供系统调用(默认操作系统不相信任何人)我们使用的fopen/fwrite/fread/fprintf/scanf/printf/cin/cout/实际上都是对系统调用的接口的封装.

2024-03-29 19:59:28 737 1

原创 【linux】进程替换

1.疑问为什么这里的退出码是0,不是1呢?原因是由于子进程被替换成ls进程后,旧的子进程后面就不执行了,所以exit(1)这句代码就不会执行,而是执行新进程ls,而进程ls执行成功,所以退出码为0.验证:我们可以通过改变要替换的子进程不存在,就不会替换子进程,所以退出码会是12.execl函数参数分析总结:1.execl函数,可以执行起来新的程序2.execl函数,执行完毕后,后续的代码不见了,因为被替换了。

2024-03-24 17:58:50 529

原创 【linux】进程控制

进程:内核相关管理数据结构(pcb+地址空间+页表)+代码+数据当fork函数创建一个子进程时,如何保证进程具有独立性?父进程的数据以及代码来自磁盘,而子进程的代码是共享父进程的,至于数据,如果子进程不修改数据的话,同样也是和父进程共享的,而如果子进程要修改数据,就会发生写时拷贝,保证数据的独立性,子进程的退出也不会对父进程做干扰.父进程退出也不会对子进程做干扰.

2024-03-22 18:48:03 1195

原创 【linux】进程的地址空间

代码解释:定义一个全局变量,然后创建子进程,让子进程在5秒开始修改这个值,观察子进程和父进程这个全局变量是否一样我们发现val变量子进程和父进程的值不一样,这个我们可以理解,因为进程的独立性,导致父进程和子进程的val不一样,但是为什么val两个的地址还是一样的解释:这里的地址并非物理地址,同一个物理地址只可能出现一个值,这里的地址其实是进程的地址空间,也叫做虚拟地址。

2024-03-20 16:47:38 1103

原创 【linux】环境变量

僵尸状态当子进程处于僵尸状态时,数据以及代码已经被退出,而保留的是他的pcb,然后要等待父进程来回收,如果父进程未回收,子进程的pcb存在在内存,导致内存泄漏孤儿进程父进程先退出,等到子进程退出的时候,没有父进程来回收子进程,这种叫做孤儿进程,而对于孤儿进程会被1号init进程领养孤儿进程演示为什么要被领养?子进程退出,父进程早已经不在,子进程需要被进程回收,所以被领养。

2024-03-18 19:37:15 931

原创 【c++】string模拟实现

这里的迭代器直接使用原生指针来封装。_str为指向string数组的首地址的指针。_size为string数组的大小。_capacity为string数组的容量。

2024-03-09 17:51:04 1153

原创 【c++】list模拟实现

测试头插。

2024-03-03 16:37:23 748

原创 【linux】进程状态

由于fork()函数给子进程和父进程返回的pid不同,我们可以根据fork的返回值来对父进程和子进程区分开来如果返回的id是

2024-03-02 11:23:41 910

原创 【git】入门

当我们设计文档时,我们会不断的修改文档,而设计的文档通过第一次修改,第二次修改,很难讲每次修改的版本维护起来,每个版本可以分为v1,v2 ,v3,v4如果需要哪个版本,我们可以直接查看。随着版本的不断增多,维护好版本是具有挑战的,各自版本的修改内容是怎么样的呢??版本控制器:记录每次修改的以及版本迭代的一个管理系统。Git可以控制电脑的所有格式的文档,对于开发人员,他们需要管理的就是自己项目中的源代码文档。git可以记录修改过程中新增了啥(文本文件,以及二进制文件)

2024-02-29 20:59:01 427

原创 【c++】vector

其实我们可以通过earse返回下一个位置,就可以解决这里的问题辣为什么string里面有迭代器失效吗??vector一般用的是原生迭代器,而string和list是别的方式,很少会出现迭代器失效。

2024-02-22 18:39:44 370

原创 【linux】体系结构和os管理

操作系统工作我们可以理解为一个银行的大系统,操作系统类比行长,而底层硬件可以理解为银行所有的硬件设施,行长是不直接和硬件设备打交道,驱动程序就是我们银行的工作人员,相当于执行者,包括后勤人员,后勤人员将硬件的信息统计起来交给行长,行长对信息进行描述,组织,就相当于对硬件设施的管理,而默认银行系统是对任何人不信任的,对外提供功能,只暴露几个窗口,在操作系统内核,也只提供几个接口对外提供功能,为了更好的提供服务,银行会在外面也设置几个服务人员,而操作系统内核也会提供第三方库,和shell程序,和用户打交道.

2024-02-19 21:50:24 991

原创 【动态规划】买卖股票问题

dp[i][1]可能i天之前已经买入,所以的dp[i][1]保持收益,dp[i][1]=dp[i-1][1];dp[i][1]可能i天之前已经买入,所以的dp[i][1]保持收益,dp[i][1]=dp[i-1][1];dp[i][1]可能i天之前已经买入,所以的dp[i][1]保持收益,dp[i][1]=dp[i-1][1];dp[i][0]可能在i天之前卖出,所以的dp[i][0]保持收益,dp[i][0]=dp[i-1][0];

2024-02-16 14:48:36 787

原创 【c++】vector的增删查改

为了防止和库里面发生冲突,定义一个命名空间,将类对象放在命名空间 里面2.定义变量,需要一个迭代器,为了便于修改,变成任意类型的迭代器,我们使用函数模版,三个迭代器变量 _start用于指向顺序表的头,_finish指向顺序表的结尾的下一位,_end_of_storage保存总容量,在初始化列表中先设置为空3.定义函数4.reserve函数开空间5.push_back函数尾插,以及尾删函数6.测试尾插,尾删,下标遍历,迭代器遍历,范围for遍历,以及运算符重载返回对应下标的元素这里开

2024-02-16 14:46:04 1344

原创 【linux】git和gdb调试工具

在vs中逐过程:F10在gdb中的逐过程:8.next8.n(简写)我们在主函数那打个断点,然后使用指令r让程序跑起来,遇到main函数处打的断点停下来,然后按n,开始逐过程,我们发现到了add函数不进函数内部,z直到程序结束.在vs中逐语句:按F11在gdb逐语句:9.step9.s(简写)同理,我们在主函数打断点,按r让程序跑起来,当到断点处,按s/step,我们发现可以进入add函数中。

2024-02-04 20:19:11 973 1

原创 【c++】类和对象4

year = 1;n = 1;int _month;int _day;int main()

2024-02-02 17:39:09 857

原创 【c++】类和对象3

拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。先定义一个类使用拷贝构造函数将d1的值拷给d2.为了更好的理解,我们可以先定义两个函数在调试过程中我们发现调用func1的时候,他会调用类的拷贝构造函数,如果调用func2函数的话,我们发现他不会去调用拷贝构造函数,而C++规定自定义的类型都会调用拷贝构造这里有两个问题?1.为什么构造拷贝函数要用传引用?

2024-01-30 17:27:51 853

原创 【c++】类和对象2

如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。

2024-01-27 15:56:21 856

原创 【linux】Linux项目自动化构建工具-make/Makefile

linux

2024-01-27 13:42:35 1390

原创 【linux】Linux编译器-gcc/g++使用

先写一段代码演示。

2024-01-23 22:04:59 856

原创 【c++】string

这里我们就要观察string类是怎么给扩容的了.看下面这块代码解释。

2024-01-22 11:23:24 888

原创 【linux】Linux编辑器-vim

关于 rzsz这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件.安装完毕之后可以通过拖拽的方式将文件上传过去1.查看软件包2.软件的安装11.如果是普通用户使用指令33.yum 会自动找到都有哪些软件包需要下载, 这时候敲 “y” 确认安装.出现 “complete” 字样, 说明安装完成.3.使用sz指令11.首先我们在linux环境下创建一个文本文件,并写入hello world.

2024-01-20 12:26:20 1292

原创 【linux】粘滞位.yum

1.我们先以root身份创建一个目录,接着在这个目录下创建一个文件2.接着我们切换成普通用户,然后删除了qq.c3.然后返回root,查看178目录的other的权限发现other在目录有w权限就可以删除目录下的文件了,和目标文件没关系如果我们想在linux下,由多个用户建立一个共享文件,来被大家共同访问,怎么办?首先这个文件,不能在我们各自的家目录下创建。因为家目录下的文件,other权限都是空的,我们只能在系统的非用户目录下创建。

2024-01-18 22:09:39 639 6

原创 【数据结构】快速排序,归并排序

1.hoare版本根据动图的演示,整理的思路如下,1.定义left,right,key。key默认是左边第一个元素,像两个指针,左边找比key大的,右边找比k小的,找到的话,交换二者,往返这个过程,当left与right相遇时,交换key和此时相遇的值.单趟下来,6出现在正确的位置。1.为什么大循环是left

2024-01-16 14:27:26 636

原创 【c++】类和对象1

1.上面的那种方法,定义和声明都在类里面2.定义和声明分开stack.cppreturn;_top = 0;// 扩容++_top;_top = 0;int* _a;int _top;源.cppint main()stack st;st.init(4);st.Push(1);st.Push(2);st.Push(3);

2024-01-12 20:04:55 1199

原创 【c++】入门4

inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。

2024-01-12 20:04:40 432 3

原创 【c++】入门3

1.swap交换两个变量值的时候可以用引用2.例题中通过前序遍历数组构建二叉树,可以用引用传别名.i变量是在main函数栈帧中创建的,在调用BinaryTreeCreate(arr,&i);完不会被销毁,可以用引用.

2024-01-05 19:40:50 981 7

原创 【c语言】飞机大战终

飞机大战

2024-01-03 15:01:05 852 1

原创 【c语言】飞机大战2

子弹发射。

2023-12-31 10:06:37 2801 3

原创 【c语言】飞机大战(1)

飞机大战

2023-12-29 21:50:05 5663 8

空空如也

空空如也

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

TA关注的人

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