- 博客(145)
- 收藏
- 关注
原创 Linux第19节 --- 用户缓冲区和文件系统
假设我们当前正常使用四个函数进行往显示器进行打印数据:此时无论是直接显示还是重定向到文件中,都可以正常显示!但是当前我们如果在代码结尾处加上fork();通过结果我们此时可以发现:加上fork()之后,此时在显示器上可以正常显示!但是如果重定向,此时的打印结果变得不一样!
2025-03-12 23:59:06
828
原创 Linux_17进程控制
list指的是像链表一样一个节点一个节点的进行传递(参数为可变参数);所有的exec* 系列的函数的第一个参数都是为了找到执行该程序的地址;找到该程序后应该怎么办?主要是确定如何执行该程序,该程序需不需要覆盖选项?(命令行中如何传,此时我们就如何传)带p指的是:PATH,也就是说execlp会在自己默认的PATH中进行查找!虽然这里显示我们调用写了两个ls,但是实际上!第一个参数ls是为了确定在哪里找到整个程序(即我们需要执行谁)!第二个ls是为了确定我们需要怎么进行执行!这里的v指的是数组!
2025-03-12 23:58:21
1036
原创 Linux_16进程地址空间
上述情况(页表映射,访问物理内存等)一定发生在该进程被执行的情况!一般来说,CPU会根据总线来访问内存;在32位机器上,有32位地址和数据总线!CPU与内存连接起来的线称为系统总线;内存和外设连接起来的线称为IO总线;内存内也有一个地址寄存器;根据地址总线的高低电平,然后在内存里面的地址寄存器寻址,从而找到对应的内存的地址;计算机内数据的拷贝,本质上一个设备向另一个设备充放电的过程!(硬件角度)对于一个进程,操作系统除了需要创建PCB,还要创建对应的进程地址空间的结构体!
2025-03-11 23:59:12
917
原创 Linux第18节 --- 重定向与文件IO的基本认识
增删查改对文件的管理即:先描述再组织!默认情况下,C/C++会打开三个标准流(输入,输出,错误) --- > 一个进程可以打开多个文件;当以"w"的形式读取一个文件的时候,如果该文件不存在,会创建一个新文件;此时创建文件的时候,默认是在当前路径下创建文件!(什么是当前路径?即当前该进程运行的时候,所对应的路径!当前路径:当前进程的cwd路径!如果我们想要改变当前的工作路径,可以通过系统调用接口chdir来实现!如下所示:此时新创建的文件就会在我们chdir指定的路径中!fopenfopen。
2025-03-11 20:53:12
828
原创 Linux第十四节 — 环境变量和进程地址空间
环境变量是系统提供的一组name = value形式的变量,不同的环境变量有不同的用户,通常具有全局属性;直接通过关键字export即可!
2025-02-22 20:25:15
800
原创 Linux第十三节 — 进程状态详解
只要一个进程的PCB还存在内存当中,哪怕此时该进程对应的代码和数据已经在磁盘当中,此时依然认为该进程仍然存在!
2025-02-22 20:24:58
906
原创 Linux第十二节 — 进程概念详解 + 操作系统引入
PPID是父类进程!可以使用getppid()获取父类进程PPID号码!--- 第二个系统调用!重新启动后进程的pid值会发生变化,但是ppid一直不变!此时我们可以自己查看父类进程!(21823为上面一直没有变化的PPID的值!bash就是传说中的王婆,当我们运行一个进程的时候, 命令行解释器会将指令解释成bash的子进程,由子进程执行对应的命令!而一旦子进程出现问题,不会影响bash进程!
2025-02-19 14:13:27
654
原创 C++_022栈的基本使用
概念:deque(双端队列:是一种双开口的连续空间的数据结构,双开口的含义是:可以在头尾两端进行插入和 删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比 较高。deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组,其底层结构如下图所示:数据都存储在每个buff当中,且有一个中控数组,实际上是一个指针数组(包含了指向每个buff的指针)
2024-11-29 03:57:47
979
原创 数据结构与算法12 - 二叉树(一文搞定二叉树!)
普通的二叉树没有实际价值,真正有意义的是搜索二叉树!搜索二叉树满足左子树都比根节点小,右子树都比根节点大;普通二叉树的增删查改也没有太大的意义,因为对于普通的二叉树来说没有特定的限制,我们不知道将数据插入到哪里有意义,因此这里我们不研究二叉树的增删查改;
2024-11-29 03:56:21
1049
原创 数据结构与算法10 - 栈+队列+二叉树引入
完全二叉树:假如我们的树有K层结构,满足前K-1曾都是满二叉树,最后一层要求从左到右是连续的,满足上面两个条件即为完全二叉树;整个数组是用一个大的结构体数组,其中每个元素都是一个小数组,元素中分别对应值和下一个元素的下标。满二叉树:一个二叉树,如果每一层的结点数都达到最大值,则这个二叉树就是满二叉树;假设当前有4个数据插入栈中(插入顺序为1,2,3,4),此时如果想按照队列出数据,我们应该把1pop!(栈的数据倒一圈就翻过拉了!问题:如果已知结点的个数为N,那么满二叉树的高度和完全二叉树的高度分别为多少?
2024-11-28 05:12:43
859
原创 C++第十四节课 string接口函数
对于operator来说,第二个重载函数的const修饰的是*this,也就是说调用[]的对象的值不能改变!底层的判断可能跟有效数据的个数有关,当调用clear清除有效数据的时候,大概率会执行缩容!对于上面的代码,默认reserve想要开辟的空间为100,但是实际开辟的大小为111!作用:获取一个字符在字符串中的位置,同时,at也支持字符串的修改!扩容是要付出代价的,如果是原地扩容的效率还可以,但如果是异地扩容的话效率会比较低!指定pos位置的时候,搜索只从pos位置之前开始找,pos位置之后不搜索!
2024-10-10 19:10:41
626
原创 C++第十六节课 万字详细手动实现string类!
接下来我们可以尝试利用缺省参数将两个string写到一个函数里面:(常量字符串末尾自带/0)
2024-10-10 19:08:03
1199
原创 C++第十二节课 模板初阶和string引入
我们不需要写具体的函数,而是写这个函数的模板,编译器会根据模板生成对应的函数;两者的作用是等效的!用模板完成的功能有时候也叫泛型编程;可以通过定义多个模板参数来实现;函数模板根据调用,自己退到模板参数的类型,实例化出对应的函数;答案:不可以!规定不可以!
2024-09-19 15:35:20
748
原创 C++第八节课 日期类的补充
(这里一个是日期类对象,还有一个是cout,cout是一个类对象---ostream的类对象!(也就是iostream这个头文件里有ostream类,cout是ostream这个类定义的对象!但是对于d1 + 100,此时d1的值没有被修改,因此运算符重载+函数可以上const来修饰!因为this修饰为const,则*this无法修改,this指向的对象内容无法修改!成员函数后面加上const之后,普通对象和const修饰的对象都可以调用!但是成员函数中的this是隐含的,我们无法修改它!
2024-09-19 15:04:33
1124
原创 C++第七节课 运算符重载
例如:日期减日期可以求得两个日期之间的天数;但是日期 + 日期没有意义!但是,直接放入类中会报错:因为成员函数的第一个参数为隐藏的this!此时调用函数是采用成员函数的方法调用,且依然可以直接进行比较!
2024-09-18 03:19:26
1670
原创 C++第六节课 - 拷贝构造函数
一般情况下,构造函数都需要我们自己去写!但是有两种情况自己可以不用去写构造函数:且对于不同的编译器来说,有的可能也会对内置类型的成员变量进行初始化!下面分别是在VS2013和VS2019中的结果:return之后调用析构函数!注意点:假如当前有一个成员变量如下:这里的_a[100]需不需要使用析构函数来释放?答案是:不需要,析构函数用于释放动态申请的资源,例如下面所示,对于静态的资源(在栈上),不需要我们去手动的释放,出了作用域会自动销毁!(如果定义的是全局对象或者静态对象->不在堆上不需要自己手动释放的,
2024-09-18 00:36:32
1102
原创 C++第四节课 - 内联函数 + 初认类
C++中将struct升级为了一种特殊的类(主要是为了兼容以前的C)- class:默认的成员访问控制是 `private这意味着如果没有显式指定访问修饰符,类的成员(变量和函数)将是私有的。- struct:默认的成员访问控制是 `public这意味着如果没有显式指定访问修饰符,结构体的成员将是公共的。int x;// 默认 privateint x;// 默认 public- class:在继承时,默认的继承访问控制是 `private`。
2024-09-11 00:17:34
1055
原创 C++第二节入门 - 缺省参数和函数重载
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数的时候,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参!2、 缺省参数分类 全缺省参数(给所有的参数指定一个值) 缺省参数的值从左到右依次赋予! 传参是从左往右依次传参! 中间不能隔着给值应用示例:通过缺省参数我们可以默认给栈的初始化赋值为4,如果这个栈过大,存放的数据过多,会一直不断扩容造成效率低下,因此可以使用缺省参数的形式避免这种情况!注意点:缺省参数不能在函数声明和定义中同时出现(且只能在函
2024-09-10 01:49:24
744
原创 数据结构与算法03 顺序表+链表
1、中间头部插入删除数据,效率低下;2、空间不够,需要扩容,但是扩容会有一点的时间消耗,且在空间上可能造成一定的空间浪费!
2024-09-09 03:26:27
991
原创 C++第一节入门
正常的命名空间定义定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型!// 命名空间中可以定义变量/函数/类型int val;命令空间可以嵌套int a = 0;int b;int a = 2;int d;此时N1和N2的a为两个不同的变量!int main()// 访问N1中的a// 访问N2中的areturn 0;
2024-09-09 03:21:23
1032
原创 数据结构与算法02 - 复杂度
这里只创建了3个变量,为常数个,因此空间复杂度为O(1)。 其空间复杂度为O(n);累计调用Fac从Fac(N) ~ Fac(0)共调用n + 1次(要创建函数栈帧),因此空间复杂度为O(n)下面F1()和F2()打印的值一样吗?Vs下打印的结果相同,在同一块区域进行相同的函数栈帧的创建和销毁!空间复杂度为:O(N)!原因:递归的过程中空间是不断创造和销毁的过程,调用Fib()时先在一侧调用完后返回,此时空间被销毁,然后再重新创建新的空间的过程!GTP解释:在递归算法中,空间复杂度通
2024-09-07 21:28:53
698
原创 Linux第十一节课 - 进程
通过ls查看会发现根据ID号码排列的一个个目录, 系统当中启动的所有进程,默认会在 /proc下面创建一个以该进程PID命名的文件夹!例如网卡出现问题,这时,驱动程序会将有问题的数据报告给操作系统,此时操作系统检测到硬件网卡出现问题,操作系统自动修复,如果修复不了就向上报给用户说明故障!同样的,描述一个进程的时候,如果进程的描述属性足够多,那么我们就可以确定具体的进程!内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针(方便找到对应的数据)操作系统必须对所有的进程管理起来!
2024-09-07 21:27:58
1503
1
原创 Linux第十节课 - gdb + 冯诺依曼体系结构
加了存储器之后,需要将输入设备传入存储器,存储器再交给运算器和控制器后进行计算,然后再返回给存储器,再交给输出设备(串行!
2024-08-15 14:49:33
1253
原创 Linux第九节课 - git / gdb
张三可以是新手程序员李四可以是老手程序员老师可以是产品经理 / 项目经理这个软件就是git ---> 可以保存在本地仓库(在自己电脑下创建一个目录保存),也可以推送到远端仓库(百度云盘);能够做版本管理的软件除了git还有svn(git是开源的!其他软件要收费)具有网络功能的版本控制器;开源的;client和server是一体的;历史有一家公司免费给Linux社区使用,但是有其他程序员尝试自己破解该软件 --->>> 自己研制处git!
2024-08-15 14:17:53
1020
原创 Linux第五节课(权限02)
粘滞位:给目录设置的(一般为共享目录),大家可以在目录进行各自文件的增删改查,只允许文件拥有者或root删除这个文件,其他人一概不允许!t是一种特殊的x权限!在Linux系统中,要删除一个文件,用户需要具有该文件所在目录的写权限。如果用户对该目录没有写权限,则无法删除文件。ls - ld /我们可以发现,根目录为root创建的, 对于其他用户来说,没有权限在根目录下创建文件夹。因此建立共享文件只能通过root来创建。
2024-07-22 21:17:23
865
原创 Linux第四节课(指令与权限)
用户将指令发给命令行解释器(例如Bash命令行),然后命令行解释器将信息发送给操作系统,操作系统处理信息后再把信息经过命令行解释器发给用户!
2024-07-21 22:13:33
974
原创 Linux第三节课(基本指令)
输出重定向:将本来应该显示到显示器的内容,打印到文件中!cp +[源文件名] [目的文件名] ---在当前目录下,将源文件名拷贝一份到目的文件名。拷贝一个同名文件到上级目录中!(在同一个目录中如果同名会报错!如果源文件是一个目录文件(内置多层目录)cp -f 强制复制不询问(在普通用户下)cp - i 询问后复制(普通用户下)若cp -fi 则依旧询问。
2024-07-21 22:10:27
1035
原创 Linux复习02
(先有键盘后有鼠标)>>>> 先有指令后有图形。Xshell中:alt + enter全屏操作。rmdir + 目录名只能用于删除空目录。windows也是命令行/图形化界面。指令操作更贴近操作系统!
2024-07-20 16:54:33
1147
原创 Linux复习01
例如:ssh root@43.138.218.166(公网IP)/ssh root@ip地址 然后再输入密码。a.商业化版本:(ubuntu,红帽,centos)内核+界面等。b.技术版本(Linux的内核源代码)2.6 2.7等等。passwd zd_108 (回车后会显示输入新的密码)Linux的版本号,例如:2.6.27.39。建议使用普通账号使用(前3、4使用root)。内核版本不同可能对应着不同的商业化版本。例如:userdel zs_108。
2024-07-20 16:51:34
426
原创 麦克纳姆轮 Mecanum 小车运动学模型和动力学分析
参考文献移动机器人的是为了解决小车的正向运动学和逆向运动学问题,即我们需要知道小车的移动平台与其移动装置之间的关系,对于Mecanum模型,。移动机器人的动态模型可估算外力因素对移动平台运动的影响,并可计算出移动平台运动所需的。
2024-05-04 23:15:40
4390
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人