- 博客(61)
- 收藏
- 关注
原创 Linux系统编程系列之进程信号
kill + l命令信号不是连着的,32-33没有。1 - 31称之为普通信号,34-64称之为实时信号,需要立即处理。这个名称本质是宏定义,#define SIGHUP 1上面提到信号的处理方式可以自定义处理,怎么自定义,系统调用接口–signal函数,man 2 signal,来捕捉信号3号手册里也有,一定封装了上面的,这里介绍系统调用接口。第一个参数就是是几号信号,第二个参数是一个函数指针!
2026-01-23 23:58:06
968
原创 Linux系统编程系列之进程间通信下(共享内存)
System V提供的通信方式有三种:System V共享内存,System V消息队列,System V信号量,共享内存和消息队列主要为了传递数据,而信号量主要为了控制进程间的同步和互斥问题。System V共享内存是最快的通信形式,原因在提到原理之后就方便理解了。
2026-01-21 22:23:49
638
原创 Linux系统编程系列之进程间通信上(管道)
两个或者多个进程实现数据层面的交互,前面提到进程是有独立性的!因为进程独立性的存在,进程的通信成本比较高。
2026-01-20 11:01:30
967
原创 Linux系统编程系列之动静态库
编译成功后,删除.a文件,仍然可以运行这里再提一个点,用系统的库的时候,是不需要加任何选项的,因为gcc的头文件默认搜索路径是:/usr/include 库文件的默认搜索路径是:/lib64 或者 /usr/lib64。
2026-01-08 23:46:38
914
原创 Linux系统编程系列之文件系统和软硬链接
之前中提到的文件fd都是对一个已经打开的文件的描述,如果是没有打开的文件呢?首先没有打开的文件一定是在磁盘中存储。文件 = 文件内容 + 文件属性,所以磁盘上存储也需要存储文件的内容和文件的属性!Linux的文件在磁盘中存储,是将内存和属性分开存储的!文件的内容----数据块中,文件的属性–inode中另外:磁盘是分区的!核心是为了方便管理,Windows下有C盘、D盘,都是磁盘,怎么定义分区?int end;} struct partion part[num]即可!那文件系统又是什么呢?
2026-01-07 18:38:39
862
原创 Linux系统编程系列之模拟文件操作
我们知道fopen、fwrite这些函数底层封装了open、write,那我们可以自己用操作系统提供的接口来实现fopen这些函数,简单实现一个Mystdio.h的库。本次内容会封装fopen,fwrite,fflush,fclose,当然FILE类型也需要自己封装,是对前几次知识的综合。另外还会有个popen,是啥不重要,进程间通信再说。
2026-01-03 22:05:06
330
原创 Linux系统编程系列之模拟shell
模拟Shell可以综合前面的知识,fork、环境变量、程序替换、进程等待、终止、内建命令等等,是一次很好的复习。
2026-01-01 19:54:02
1174
原创 Linux系统编程系列之进程控制(下)
fork之后,我们可以让子进程和父进程执行不同的分支,但是我如果想让子进程执行一份新的程序呢?—进程程序替换进程程序替换是通过exec一系列接口,让一个正在运行的进程,完全替换自身的代码段、数据段、堆、栈等资源,转而执行另一个程序。程序替换的时候也没有创建子进程,只是进行了进程的程序代码和数据的替换工作。程序替换中环境变量信息不会被替换,创建子进程的时候环境变量就已经继承给子进程了,extern char** environ;所以,程序替换中环境变量不会被替换。
2025-12-31 19:53:23
957
原创 Linux系统编程系列之进程控制(上)
进程控制主要是分为进程创建、进程终止、进程等待、进程程序替换,这些内容学完就可以自己模拟一个shell了,本次先主要介绍进程创建和进程终止。
2025-12-30 19:03:34
758
原创 Linux系统编程系列之地址空间和页表
这是个人对于地址空间和页表的全部理解,也是查询了很多资料来的,不敢说很全也不敢说百分之一百正确,仅供参考。
2025-12-29 21:19:53
1143
原创 Linux系统编程之进程概念(下)
本次要介绍的内容大方面上就是进程状态、进程优先级、环境变量、虚拟地址空间,整体对进程概念有了一个相对完整的认知。
2025-12-28 18:30:59
806
原创 Linux编程系列之冯诺依曼体系和认识操作系统
绝大多数计算机都遵循冯诺依曼体系结构,由五部分组成,输入设备,输出设备,存储器,运算器,控制器。存储器就是俗称的内存,运算器和控制器合称为中央处理器(CPU),具体结构:介绍一下每一部分:存储器:就是内存输入设备、输出设备统一称为外设。常见的输入设备比如:键盘,鼠标,话筒,摄像头,磁盘,网卡等常见的输出设备比如:显示器,播放器,网卡,磁盘等有的设备既可以是输入设备也可以是输出设备,比如网卡和磁盘。运算器:对我们的数据进行运算,包括逻辑运算和算数运算。
2025-12-24 19:05:52
852
原创 Linux编程系列之权限理解和基础开发工具的使用(上)
本次一部分是将上次ls中没介绍完全的东西介绍完,然后就是一些工具、yum、vim、gcc/g++,gdb,makefile,CMake,再用vim写一个简单的进度条代码,本篇介绍到vim。
2025-12-19 18:44:23
713
原创 Linux编程系列之前置知识和Xshell指令
Linux下一切皆文件,无论是键盘还是显示器,都被解释成了文件,这个在后面的VFS中会更详细的提到,(虚拟文件系统)常用指令需要掌握,因为学习其他内容这些指令还是得用。下次估计是权限 + yum + vim + gdb + makefile + cmake,如果东西太多会分两次的。
2025-12-15 23:17:46
727
原创 数据结构系列之十大排序算法
这些算法中后三个了解即可,快速和归并比较重要,前七个算法需要能准确的知道时间复杂度、空间复杂度、稳定性、原理。数据结构终于告一段落了,准备开始写操作系统的博客。
2025-11-07 19:27:32
1146
原创 数据结构系列之快速排序
首先,既然敢叫快速排序,那这个排序确实是有点说法的,C++的sort底层就是快速排序。快速排序首先是交换排序,是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。// 按照基准值对array数组的 [left, right)区间中的元素进行划分。
2025-11-06 23:06:30
722
原创 数据结构系列之二叉树
二叉树是一颗树,可以为空,由左子树,右子树,根组成, 二叉树不存在度大于2的节点,当然,左子树和右子树都可以不存。一些特殊的树:1.满二叉树: 除了叶子节点,每一层的节点都有左右孩子,这就是满二叉树,深度为h,一层的节点个数为2 ^ h.2.完全二叉树堆的结构里提到了,每一个节点都能与深度相同的满二叉树中1到n的节点相对,就是完全二叉树,满二叉树也是一种完全二叉树二叉树的东西很多,特别是递归的玩法让人很不适应,需要掌握,下次直接更新所有的排序算法。
2025-10-22 21:32:08
820
原创 C++系列之刷题系列---栈的应用
数据结构留作业了,正好就水一期,本次是两个关于栈的题目,难度不算很难,leetcode里面的关于栈的题目我不想在这里写,等我开始刷题再去更新。下次依旧随缘。
2025-10-14 15:18:17
288
原创 数据结构系列之堆
堆本质是一颗二叉树,并且是一棵完全二叉树!!!!(其结点编号与相同深度的满二叉树对应位置一致)其中又分为大根堆和小根堆,大根堆—顾名思义:根比左孩子和右孩子的节点值都要大,小根堆相反.下面默认讲解的都是大根堆,因为堆的这个性质,根节点就是最大的节点.同时在每一颗子树中根节点都是最大的,由于这个性质,之后的排序算法之一就有一个堆排序(排序中讲).对于下标:假如根节点的下标是i,左孩子的下标是2 * i + 1,右孩子的下标是2 * i + 2,孩子的节点的下标是i,父亲就是(i - 1) / 2。
2025-10-14 14:58:47
521
原创 C++STL系列之bitset
第一次提到bitset应该是在第一次算法博客上提到,它可以完美的代替bool a[N],bitset到底是什么,我们下面来讲解一下bitset称为位图,bit–比特位,set集合,位图,就是每一位存放一种状态,通常判断某个数据在不在,使用于数据量大,无重复,只关注在不在的数据的情况。当然库里是有bitset的bitset这里放的是位数,比如有bitset<1000 > bt,就是存放1000bit位,想表示10存在,就把10搞成1。布隆过滤器了解,bitset的使用要清楚。
2025-07-30 20:47:51
1043
原创 C++STL系列之unordered_set和unordered_map
unordered系列模拟实现的东西比较多,需要掌握,另外,其实哈希还有一个位图 、布隆过滤器就在下次讲了。
2025-07-25 18:17:21
1075
原创 数据结构系列之哈希表
第一次接触哈希应该是字符串算法中学到的字符串哈希,,可以快速实现一个字符串在另一个字符串中查找出现次数,O(n + m),他其实是将每一段字符串都映射成了一个值。哈希是一种思想,我们在搜索树中要根据一定的规则来寻找元素,元素和位置没有关系,如果我们能不经过比较,直接O(1)拿到元素的位置,可以实现快速查找,哈希就是这样一种思想,通过哈希函数使元素存储的位置和他之间建立起一一映射的关系,这种思想就是哈希。其中使用的转化元素的函数称为哈希函数,搞出来的结构是哈希表。
2025-07-25 12:50:18
673
原创 数据结构系列之红黑树
首先:红黑树仍然是一颗搜索二叉树,但他引入了颜色这一概念,每个结点多一个存储位来存储颜色,它通过维护下面五条规则来保证,最长路径不超过最短路径的二倍。1.每个结点不是黑颜色就是红颜色2.根节点是黑色3.如果一个节点是红色,则他存在的孩子节点是黑色,换句话说,任意一条路径不存在连续的红色节点。4.对于每个节点,到所有NIL节点的路径上,均含有相同数量的黑色节点。5.每个NIL节点都是黑色的为什么设计第五条规则?看图:这五条规则里最重要的就是三和四,插入也要维护三和四。
2025-07-24 13:27:25
1102
原创 数据结构系列之AVL树
AVL树仍然是一颗搜索二叉树,但他和普通的搜索二叉树的区别就是有一条规则:任意结点的左右子树的高度不会超过一,通过这一条规则来维护这颗树相对比较满。这样如果有N个结点,他的高度可维护在logN,插入的复杂度也在O(logN)前面已经讲了是三叉链结构,直接写成KV结构了int bf;:_kv(kv),bf(0){}这里的bf就是平衡因子,balance factor,节点没啥讲的。AVL的旋转是个难点,需要把握好边界,红黑树的旋转和AVL树的旋转类似,所以需要掌握。
2025-07-23 22:32:18
907
原创 数据结构系列之二叉搜索树
binary-search-tree,简称BST(不要叫成SBTree),可以是空树,如果是非空树,满足下列规则:1.如果根结点的左子树存在,那么左子树上的所有结点的键值都比根节点上的键值小。2.如果根结点的右子树存在,那么右子树上的所有结点的键值都比根节点上的键值大。3.左右子树也满足二叉搜索树的规则。二叉搜索树又称二叉排序树,因为它走一个中序遍历拿到的就是升序。这个还是建议要掌握牢的,因为后面的学习建立在这个的基础上。
2025-07-23 15:02:29
919
原创 C++STL系列之priority_queue和仿函数
优先级队列文档优先级队列是堆,可以想象成一颗树形结构,如果是大堆,那么子结点的值都小于等于父结点,优先级队列也是容器适配器,所以没有迭代器。不支持遍历,当然想遍历就需要取top()然后pop()。底层用的是vector,默认情况下建的是大堆,第三个参数就是仿函数,后面讲。本篇内容比较简单,主要会使用就可以,优先级队列的向上调整和向下调整需要掌握,仿函数需要掌握,Top-K问题是一个比较重要的问题,一定要掌握堆方法,其他都不太重点。
2025-07-21 21:10:40
793
原创 C++STL之stack和queue
本次内容主要介绍了反向迭代器和适配器,适配器相对简单,deque虽然比较复杂但是不需要过多了解,知道优缺点即可,反向迭代器是一种很牛的设计,需要记住。
2025-07-20 21:11:06
896
原创 C++STL系列之list
list的迭代器需要掌握,后面的map和set还会用到类似的思想。还需要掌握vector和list的区别,可以从底层,随机访问,插入删除,空间,迭代器等场景来做对比。
2025-07-20 17:55:36
1168
原创 C++STL系列之vector
vector用的也不少,需要多加练习。关于反向迭代器,这个会在stack和queue的那篇博客来讲,因为他们的思想一样明天更新list,stack,queue。
2025-07-19 22:03:11
1166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅