自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 库函数的学习

那是因为我们静态库在编译的时候就可以查找,我们之前用的方法就是在编译时可以查找,静态库会直接拷贝到我们的代码当中,所以运行的时候可以不需要i库。-L之告诉编译器,这个库在我们当前目录下,不然会找不到,它默认去的是lib64找。我们使用静态库的方法,然后形成可执行的main文件,我们执行,发现无法执行。gcc main.c -o main -I 文件 -L 文件。-l后面跟我们哭的名字,注意我们库的前缀和后缀都要去掉。使用-I -L -i这样的选项可以随时链接库。我们库的本质是:.o文件的集合。

2026-11-08 18:01:36 213

原创 软硬链接

我们查一个文件的权限的时候,第一个数字表示这个文件的硬链接数量,他表示,有多少个文件也这个文件指向的内容一样,也就是inode是同一个。原因是因为又新建的里面有..这个文件指向的是哦我们原来的文件,这里本质还是一个硬链接,所以这里变成了3。因为我们目录中默认有.这个文件,这个.文件是指向他自己的,这里就是一个硬链接。注:我们手动硬链接的时候不要给目录建,这样就会find的时候就会陷入死循环。一个独立的文件(有自己的inode),保存的是目标文件的路径。也就是说,你的文件要访问是要有路径的。

2026-11-07 17:22:10 236

原创 inode编号

均依靠inode编号来进行我们有时候删除一个程序很快一个原因就是,我们只需要把inode这个位图的1变成0就可以了我们下载的时候慢是因为要实际的拷贝数据。

2026-11-06 16:15:33 168

原创 理解缓冲区

我们一个进程是一个结构体,结构体里面包含了fules_struct,这个就是我们文件描述符,这是一个数组,012都是已经被占用了,他指向的是我们的文件。我么使用这写系统调用是由成本的,因为我们上面说了,我们使用这些系统调用,本质就是拷贝来,拷贝过去,这就会导致我们执行时间会增加,就是慢。还有就是malloc,new我们之前说要减少使用,提高效率,就是因为这两个函数的底层封装的系统调用,所以减少使用就可以提高效率,因为要写到内核级,所以这就涉及到了拷贝函数,本质就是拷贝!我么们来看这个函数,关键是FILE。

2026-11-01 12:41:28 75

原创 文件描述符

如果我们关闭1,此时有打开一个新文件,那么我们的输出就会重定向到我们的这个文件里面,也就是本来应该输出到屏幕上的,我们此时会输入到我们文件里面。我们下面的各个硬件是子类,继承了基类,然后有自己的特点(就是相同的工作,各个硬件之间方法不一样)我们开启一个文件就会把这个文件放到我们的这个数组里面,放的顺序就是找最小的且没有使用过的fd。第一个是查看我们文件描述符1得位置是哪一个文件,之前默认1是屏幕,我们就输出到屏幕上。就是把我们打开的fd(我们打开文件的返回值)这个文件,改到1位置,这个是一个系统调用。

2026-10-31 13:34:07 165

原创 基础IO——文件

a.文件=文件内容+文件属性所以我们对文件的操作就是内容和属性b.我们访问文件的前提是必须打开文件,更重要的是找到文件但是有时候我们不提供路径就可以打开是因为我们有环境变量PWD这个里面存的就是当前进程的路径,直接拼上去就是文件和进程的关系c.打开文件其实就是在做什么就是把文件的内容和属性全部加载到内存里面所以我们对文件进行操作本质上就是进程对CPU访问内存当中的数据d.Linux中存在大量的文件分为打开的,没有打开的文件从位置上可以分为:内存级被打开和磁盘文件。

2026-10-31 12:35:44 215

原创 自己的myshell

我们自己写的shell功能还很简陋,可以执行最基本的查看当前目录,看一下退出码,看一下环境变量等一些功能我们后面有一些操作,这些头文件可以让我们操作更加方便,不加的话就会失败这些后续都会使用,方便使用为了找到我们所传进来的目录最后一个名字用来保存我们的命令。

2026-10-30 17:27:54 2

原创 进程替换函数与shenll命令行解释器

这里得第二个参数是指针数组,也就是说,我们之前不是要手动输入吗,这里不需要,我们提前把要执行的写到表格中,这里直接传一整个表格就可以了。我我们写file是要去环境变量里面寻找,但是有些时候,环境变量是找不到的,所以这里第三个参数就表示,在我们自己设立的环境变量里面去寻找。补充:我们的替换是存在进程层面的,也就是说,只要一个程序开启运行变成了一个进程,此时就可以被替换,不在乎它是什么语言。我们第三个参数除了写我们自己的,如果不想写可以用。自主shell命令行解释器。我们上讲的其实都是库函数。

2026-10-23 16:17:04 179

原创 非阻塞与进程程序替换

我们上一篇讲了options=0,表示父进程进行阻塞,但是我们有些时候可以不这样,也就是说子进程和父进程各干各的,之后父进程过一会看一下子进程运行情况。我们在使用status的时候,因为它会自动进行位图操作,所有我们看的不直观,这时候,他就给我们了一个宏定义。这样在子进程中使用exec就不会影响到父进程,把后续的代码写道父进程当中,就可以解决这个问题。这样写在代码当中,我们原来的代码就不会执行,她之后的不会执行,也就是替换,会覆盖掉老的程序。注意:这里只是覆盖,但是没有创建新的进程,pid是没有有变化的。

2026-10-22 10:42:07 11

原创 进程控制管理

这两种情况可以一起说的,我们在进程当中,可能遇到return,就是一个函数结束了,此时会有一个返回值,我们可以通过观察者个返回值,来判断我们的进程有没有执行成功,一旦有了返回值,我们都说代码跑完了,系统当中,有一套固定的错误码,就是看一个返回值,对照这个码,来找为什么错误,但是在实践过程中我们往往,自己来定义不同的数字,来表示什么,从而找到原因。但是_exit不会,也就是说我们要是使用_exit来结束进程的化,不会自动刷新缓存区,咱们上面讲的例子就是不正确的,也就是永远不会刷新,用用于不会显示!

2026-10-20 20:56:13 152

原创 程序地址空间

先回答第二个子问题我们上面介绍了页表相关的知识只说了两个其实还有许多保存的东西剩下的叫做标志位我们拿出两个来说明一下。

2026-10-20 13:20:12 201

原创 环境变量,本地变量

这关键就是存在一个配置文件,我们点击xshell之后会先运行bash,这个命令就是看配置文件的,我们之前改path再给也不是配置文件,说白了就是改了内存,所以从新开始之后,主要配置文件不改,其他的都是白谈。在这个文件下,这里面的文件路径,我们直接执行,是不需要写路径的,默认可以运行,但是我们自己写的命令不在这里面所以需要加./这个意思是,在这个路径下寻找。我们上一章说过了,main里面是可以写参数的,这个参数最多是三个,除了我们上次写的那两个,还有一个就是。除了这种方法还有两种在代码中获取环境变量的方法。

2026-10-19 21:17:01 223

原创 调度问题 命令行参数

在执行的过程中,我们先执行活跃队列,当活跃队列中的一个进程,时间片到达之后就会停止,此时不代表消失,就是不执行它了而已,那么他应该拥有一个去的地方,此时就会让他去过期队列当中,等待活跃队列所有进程执行完毕之后,此时就会执行过期队列,此时过期队列就在一次成为活跃队列。在我们运行队列中,存在一个queue[140],在这个数组当中,我们不关心0到99,我们现在所关心的是100到139。答:在我们运行队列当中不仅仅只有一个队列,我们是有两个的,一个叫活跃队列,一个叫过期队列。

2026-10-16 16:29:19 237

原创 孤儿进程和优先级

区分前后台:谁能从键盘上面获取数据谁就是前台,再获取输入的时候只能有一个进程从键盘上面的获取,所以前台进程只有一个。寄存器是共享的,但里面的数据,本质是进程私有的,叫做进程上下文,但一个进程达到时间片的时候,换优先级更高的执行。单片机就是这样的,严格的时间限制,超时会故障,并且当有优先级任务过来的时候,这个任务会立刻停止。并发:多个进程在一个CPU下,采用进程切换的方式,在一段时间内,让多个进程得以推进。相对公平的调整策略,较为均衡的让不同的进程都能在一段时间内得到CPU的资源。

2026-10-15 14:53:04 72

原创 进程的状态

我们在上面一篇文章当中讲了阻塞和运行就是看task在哪一个队列当中。

2026-10-14 13:53:17 203

原创 进程的状态

我们发现我们大部分程序都是有一个ppid的代码,这个就是他父进程的id,我们发现无论这个程序运行还是关闭之后再一次运行,它的ppid都是不变的,运行:在cpu中会存在一个栈来储存正在被执行或者将要被执行的进程,故:我们就说只要是子啊这个站里面的我们都是运行状态的进程。这里面是我们这个进程当前的路径,我们如果开一个新的文件,不写任何路径,就默认在cwp这个路径下,在代码中使用fork之后就有两个执行流一个是原来的,一个是被创建的子进程。1.为什么子进程返回的是0,父进程返回的是子进程的id?

2026-10-13 21:53:44 190

原创 进程理解1

进程:运行起来的程序,内存当中的程序程序<>可执行文件<>指令程序就是磁盘上的一个普通文件。

2026-10-12 11:23:59 53

原创 冯诺依曼+操作系统+进程

核心思想:存储程序原理——程序和数据都储存在储存器中,计算机按照指令执行程序换句话说:CPU不和外设打交道,只和内存打交道为什么这个体系火爆?数据可以提前加载,大部分情况下,处理数据就可以转化为cpu和内存交互那么计算机的效率就以内存为主内存又比较便宜普通人可以用低的价格获得高效率的价格。

2026-10-10 19:25:49 195

原创 gdb/cgdb

版本控制器结论.git只记录变化git是一个去中心化的版本控制器,但是我们通常使用的时候会按照中心化来使用,version用来判断我的电脑上面是否安装了git也有一些关键词git add把当前目录下所有的文件都上传到我的暂存区当中git commit -m " "提交日志,提交到本地仓库中git push 上传到远端仓库中这个就是git的工作流程图git status查看当前文件夹里面的文件的状态,是在本地仓库?远端仓库?还是在缓存区git log 查看当前仓库的提交日志。

2026-10-08 14:26:03 209

原创 进度条1111

我们在C有一种学到的\n是回车换行的意思,但实际上在linx里面回车换行是一个动作,回车是\r换行是\n。

2026-10-06 21:20:53 35

原创 makefil

这两个就是自动化项目构建make是命令makefile是一个文件的名字。

2026-10-05 16:02:37 219

原创 gcc,g++

我们一直说的-o是输出到指定文件里面这就是运行后的结果。

2026-10-04 16:31:32 169

原创 linux开发工具

apt后面跟list可以查看命令列表,也就是可以安装所有命令,这个数量非常庞大apt后面跟remove可以删除安装包apt后面跟上一个关键词,可以查找含这个关键词的安装包。

2026-10-02 23:21:52 260

原创 linux权限

注意:假如,root或者其他的用户,在我的目录里面建立一个文件,并且不给我任何权限,我i们无法查看,无法修改,但是我们依旧可以删除!,因为这是我们自己的目录,我们有最高的权限。要是不经过任何操作的话,我创建的一个文件(必须先用sudo扩展权限才可以),这个文件用来共享,所以必须开rw权限,那么这是这台服务器下面,而可能有其他用户,可以将它删除!此时没有w权限,这就会导致我们不可以创建文件,不可以改文件的名字,但是依旧可以改文件的内容,因为这涉及到的是文件的权限。此时失去了r权限,我们依旧可以进入文件。

2026-10-01 16:51:24 158

原创 linux权限

访问资源能还是不能的问题。

2026-09-29 14:30:06 168

原创 linux指令

三种用法需要注意的是第二个只能是-3不能是其他的数。

2026-09-23 22:56:09 146

原创 linux基本指令

我们通常不知道一个指令是干什么的,linux内部给了我们展示命令信息的方法之后按q退出还可以查询C语言的东西但是这个我们不常用,一般都直接搜索了补充知识:linux系统下一切皆文件。

2026-09-22 19:40:02 136

原创 linux基本指令

pwd查看工作目录(我在那个路径下)刚开始肯定都是在root这个目录下工作whoami,查看当前谁在访问linuxroot代表管理员,现在管理员在访问linuxclear清屏ls 查看当前目录(等同于文件夹)里面的文件或者文件夹因为是新装的所以啥都没有mkdir ......新建文件夹如图新建一个文件夹fhjcd ....进入文件夹(可以用pwd来检查是否进去)(更改当前工作地方)touch ...在当前目录下建一个文件可用ls来进行查看注:文件=文件属性+文件内容。

2026-09-20 21:33:41 89

原创 智能指针11

weak_ptr也没有重载operator*和->,因为它不参与资源管理,那么如果他绑定的shared已经释放过资源了,那么再去访问它就很危险,weak_ptr支持expired检查只想内容是否过期,use——count也可以获取shared的引用计数,weak_ptr想访问资源时,可以调用lock返回一个管理资源的shared,如果资源被释放了,返回的shared就是一个空对象,要是没有被释放,那么访问就是安全的。shared_ptr它的名字翻译过来是共享指针,它的特点是支持拷贝,也支持移动。

2026-09-17 16:03:18 158

原创 异常11111

异常处理机制允许程序独立开发的部分能够在运行时出现问题并通知,并处理相应问题,他可以使我们将问题检测和解决问题过程分开,程序一部分检测问题的出现,另一部分处理C语言主要通过错误码形式处理错误,知道错误码之后还要找比较麻烦,异常抛出一个对象,这个对象可以显示更全面的各种信息。

2026-09-16 12:22:15 146

原创 C++11

C++11是一次巨大的更新具有里程碑的意义,是现代C++编程的起点。

2026-09-15 11:15:18 77

原创 C++11

编译器连续步骤优化:当编译器检测到连续构造的行为,就会省去临时对象的中间介质,直接用str拷贝ret,就一次构造。激进优化:在现代编译器,它直接复用外部调用方的栈帧空间:str的构造直接发生在ret的内存地址上,0次拷贝构造。左值引用要进行深拷贝,在之前不区分的时候,所有都是进行神拷贝,但是这就会导致资源的浪费,所以引进了右值,现代编译器:省去局部对象到临时对象的中间拷贝:直接返回临时对象,局部变量ret本质时该临时对象的引用。移动构造:属于构造函数的重载,第一个参数必须是右值,也就是要被销毁的。

2026-09-10 16:39:34 47

原创 哈希表 ·

简单来说把关键词的key以某种计算方式映射到哈希表里面,来存数据查找的时候直接运用这个函数,找到这个位置。

2026-09-08 10:35:37 152

原创 AVLTree

1.AVL树是最先发明的自平衡二叉查找树,它或者是一颗空树,也或者是具备下列性质的二叉搜索树左右子树都是AVL树,且左右子树的高度差不可以超过1。AVL树是一颗高度平衡的二叉搜索树,通过高度差去控制平衡。2.为什么高度差要不超过1呢,经过分析可以知道,如一棵树2个结点,4个节点,高度差最好就是1,无法做到0.

2026-08-22 16:18:00 197

原创 map set

这里的本质就是:之前key就代表是一个索引,value是一个附加值这里与我们接下来要讲的有很大的联系二者大部分是相同的但也有少量的部分是不一样的例如输出核心用法就是存储一个数组,输出的时候自己会排好序(升序),并且自动剔除里面的重复数据输出的结果是。

2026-08-21 15:01:02 183

原创 搜索二叉树

如图先构造一个二叉树的节点,由一个数值,和左右两个孩子组成,并给他进行初始化。

2026-08-05 16:54:46 170

原创 C++进阶——多态

多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为2.1.1。

2026-08-05 15:03:43 153

原创 C++进阶——继承

如图一共是有三种继承方式的。

2026-08-04 15:23:58 181

原创 string自我实现

/:_str(new char[strlen(str)+1])//要是直接拷贝的话,原来的的const,但是现在没有const,这是权限放大,所以先开辟空间,后续在进行复制。//:_str(new char[1] {'\0'})//这里要是直接为空,那么要是访问的话就算是空指针解引用了,会直接报错,所以这里面放一个\0。//,_capacity(_size)//修改后这样,但是C++底层在初始化列表进行初始化的时候,是根据同文件里面的顺序,这样好像也不可以。//, _size(0)//这两个都不算\0。

2026-07-17 09:54:42 13

原创 string3

c语言中可以使用const char*,此时使用c_str可以将str从string类型转化为const char*,相当于在C与C++里面搭建了一个桥梁。如上,此时str1里面就存储的是.cpp,后面还可以跟要拷贝多少,这里没有就是默认全部了。第二行,因为要打开文件直接访问源文件的首字母C是不兼容的,所以用c_str来。因为c不兼容c++,c++中string在c中是无法使用的,所以需要它。从开头找are的位置,这里也可以寻找单一的字符。前者不可以越界,后面的那一项是可以越界的。寻找字符所在的位置。

2026-06-26 20:48:03 22

空空如也

空空如也

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

TA关注的人

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