自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux-----文件系统

文件大家都知道,前面的我的博客课程也为大家解释了关于文件的打开等,今天我们要谈论的是文件在没被打开的时候在磁盘中的位置和找到它的方式。画图为大家展示:我们先从第一个开始这就是简单磁盘的物理结构的相关知识。我们接着往下走上面就是磁盘的一些存储知识有了上述知识做铺垫,那么我们该如何找到(定位)指定的扇区去找到我们想要的内容呢?有下面三个步骤:这里涉及到一个知识:CHS定址法‌(Cylinder-Head-Sector)是一种用于确定磁盘上每个扇区位置的方法。它通过三个参数来标识磁盘上的每个扇区:‌。

2025-05-07 16:23:43 631

原创 Linux--- 重定向___缓冲区

的地址,不再是显示器文件的地址,所以,输出的任何消息都会往文件中写 入,进而完成输出重定向。的时候,父子数据会发生写时拷贝,所以当你父进程准备刷新的时候,子进程也就有了同样的 一份数据,随即产生两份数据。另外,我们这里所说的缓冲区, 都是用户级缓冲区。相关函数与系统调用接口对应,并且库函数封装系统调用,所以本质上,访问文件都是通过。此时,我们发现,本来应该输出到显示器上的内容,输出到了文件。有,足以说明,该缓冲区是二次加上的,又因为是 C,所以由。而我们放在缓冲区中的数据,就不会被立即刷新,甚至。

2025-04-23 11:00:34 1060

原创 Linux ------基础 IO操作

打开文件的方式。

2025-04-10 21:32:31 907

原创 Linux 进程的替换

简单来说:我们正常运行程序(执行代码),当程序运行到 execl 的时候,我们的进程(进程=内核数据结构+代码和数据) ,内核数据结构不发生变化,但是有些属性会发生变化,老程序的代码用新的程序替换掉,老程序的数据用新的程序替换掉。我们可以理解为 “夺舍” ,替换完了什么都不会变,唯一的变化就是加载的时候代码数据有大有小。原理:fork 去创建子进程,让子进程去替换,父进程等待子进程替换。关于进程的替换一共有七个函数,我们先不解释先用起来给大家看看现象。没有问题,所以当前我们可以替换任何想要替换的程序。

2025-04-09 17:48:16 723

原创 Linux 进程的控制

学习进程创建学习到进程等待学习到进程程序替换微型shell,重新认识shell运行原理学习到进程终止认识在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。进程调用fork,当控制转移到内核中的fork代码后,内核做:分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork返回,开始调度器调度当一个进程调用fork。

2025-04-07 20:38:44 870

原创 Linux 地址空间(一看就懂,一学就会)

我们先来解释第一个什么是划分区域?我来给大家带入一个想象我们还是通过画图来为大家解释。这是我带大家了解的一个概念。

2025-04-06 16:26:27 1291

原创 Linux进程的概念(下)

解释一下: 我们可以想象我们去食堂吃饭,我们去食堂打饭是不是一个人接着一个人排队来,那我们换种方式理解,如果食堂很大超级大,有无数窗口,那么我们就不需要一个人一个人的排队打饭,按照优先级,排队的原因就有窗口有限,我们需要按照优先级来确定打饭顺序。NI:进程优先级的修正数据, nice值, 新的优先级= 优先级 + nice ,达到对于进程优先级动态修改的过程。值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行 所以,调整进程优先级,在Linux。很有用,可以改善系统性能。

2025-04-05 10:13:07 669

原创 Linux进程的概念(上)

系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统 调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次发。进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎 么样了。在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。我们常见的计算机,如笔记本。所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入。

2025-04-04 15:49:27 1192

原创 Linux 的基本指令 一篇就够了(下篇)

用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。公历是现在国际通用的历法,又称格列历,通称阳历。详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类。在预设的情况下,我们可以将压缩档在任何地方解开的!命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系。,系以地球绕行太阳一周为一年,为西方各国所通用,故又名。的属性是很重要的,尤其是当您要保留原本文件的属性时!命令在目录结构中搜索文件,并执行指定的操作。显示系统前一个月,当前月,下一个月的月历。

2025-04-03 16:30:52 711

原创 数据结构终极篇-----排序

1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:不稳定。

2025-04-02 21:03:29 766

原创 Linux 的基本指令 一篇就够了(上篇)

指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存 在的目录,则会出现错误信息。命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它 将所给的源文件或目录重命名为给定的目标文件名。命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。

2025-04-02 21:02:55 712

原创 Linux 操作系统(1) 入门----环境的搭建

1969年,贝尔实验室的肯·汤普森在PDP-7计算机上开发了一个简单的操作系统,具有文件系统等基本功能,被视为UNIX的雏形。- 这一时期,UNIX在工作站等领域广泛应用,Sun公司的SunOS等基于UNIX的系统推动了UNIX在网络计算领域的发展。- 1991年,Linux内核发布,它借鉴了UNIX的设计思想,以开源的方式迅速发展,成为UNIX-like系统的重要代表。- 商业UNIX系统竞争激烈,IBM的AIX、HP的HP-UX、Solaris等各自发展,推动了UNIX性能和功能提升。

2025-03-31 20:04:23 728

原创 二叉树和堆 ------ 一篇就够了

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1

2024-11-25 14:31:55 799

原创 C++ string类(超详细一次性讲解)(上)

C语言中,字符串是以 '\0' 结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。

2024-10-09 09:07:20 681

原创 C++-----STL简介(了解)

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

2024-09-09 08:06:50 705

原创 C和C++的内存管理

*operator new:该函数实际通过malloc来申请空间,当malloc申请空间成功时直接返回;申请空间失败,尝试执行空 间不足应对措施,如果改应对措施用户设置了,则继续申请,否则抛异常。*/void *p;// 如果申请内存失败了,这里会抛出bad_alloc 类型异常return (p);/*operator delete: 该函数最终是通过free来释放空间的*/

2024-09-05 08:35:40 1032 1

原创 C++类和对象(上篇)续

我们接着C++类和对象没讲完的接着讲完。

2024-05-15 20:50:32 876

原创 C++类和对象(上篇)

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

2024-05-15 08:57:34 1052

原创 C++入门(下)

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化。

2024-05-12 20:56:14 661

原创 C++入门(上)

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。// bit是命名空间的名字,一般开发中是用项目名字做命名空间名。// 我们上课用的是bit,大家下去以后自己练习用自己名字缩写即可,如张三:zs// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;//2. 命名空间可以嵌套int a;int b;int c;int d;

2024-05-08 20:20:00 1318 1

原创 C语言实战项目---通讯录

项目要实现的内容:能够存放100个人的通讯录程序,能够实现联系人数据的存储,删除,修改,查找,展示联系人的信息。所需知识:结构体,指针,函数.................废话不多说,咱们直接开始。

2024-05-07 15:25:34 686

原创 数据结构(五)单链表专题

在开始之前,我先来给大家讲一下顺序表与链表的区别:它们在堆上存储的差异:我们可以很容易的知道,循序表是连续的有序的,但链表是杂乱的,它们通过地址彼此联系起来。

2024-03-26 19:19:08 1088 1

原创 数据结构(四)顺序表与链表的深层次讲解

数据结构是由“数据”和“结构”两词组合⽽来。什么是数据?常⻅的数值1、2、3、4.....、教务系统⾥保存的⽤⼾信息(姓名、性别、年龄、学历等等)、⽹⻚⾥⾁眼可以看到的信息(⽂字、图⽚、视频等等),这些都是数据什么是结构?当我们想要使⽤⼤量使⽤同⼀类型的数据时,通过⼿动定义⼤量的独⽴的变量对于程序来说,可读性⾮常差,我们可以借助数组这样的数据结构将⼤量的数据组织在⼀起,结构也可以理解为组织数据的⽅式。想要找到草原上名叫“咩咩”的⽺很难,但是从⽺圈⾥找到1号⽺就很简单,⽺圈这样的结构有效将。

2024-03-25 09:10:02 2066

原创 数据结构(三)复杂度的深层次剖析

之前发布了数据结构(一),很多同学反响不够清晰,那今天就发一篇对复杂度专题的博客,希望对大家理解复杂度提供一些帮助。

2024-03-19 15:37:05 808

原创 C语言 实用调试技巧

第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。注:参考资料Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。从上述我们不难观察出debug和release它们的大小差异很大(debug 61KB release 11KB)那这是为什么呢?这是因为debug包含了调试等其他的一系列的过程所以大小会更大。

2024-03-18 17:16:45 1113

原创 数据结构(二)顺序表和链表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

2024-03-15 20:08:42 2001 1

原创 数据结构(一) 复杂度讲解

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。

2024-03-14 20:01:29 662

原创 C语言实战项目---贪吃蛇(下)

C语言实战项目,是我作为C语言结尾的一个项目。内容很多,有些也不好理解。但是大家不用担心,后续我会持续更新具体代码的讲解。我们接着上次的内容继续(C语言实战项目---贪吃蛇(上)),这次是C语言的最后一篇博客,明天我就正式开始更新数据结构了。想继续学习的同学和志同道合的人不要错过。

2024-03-14 10:38:20 1500

原创 C语言实战项目---贪吃蛇(上)

贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块,扫雷等游戏位列经典游戏的⾏列。在编程语⾔的教学中,我们以贪吃蛇为例,从设计到代码实现来提升学⽣的编程能⼒和逻辑能⼒。使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇实现基本的功能:• 贪吃蛇地图绘制• 蛇吃⻝物的功能?(上、下、左、右⽅向键控制蛇的动作)• 蛇撞墙死亡• 蛇撞⾃⾝死亡• 计算得分• 蛇⾝加速、减速• 暂停游戏• 提⾼学⽣对编程的兴趣• 对C语⾔语法做⼀个基本的巩固。• 对游戏开发有兴趣的同学做⼀个启发。• 项⽬

2024-03-13 10:17:49 1173 1

原创 C语言 编译和链接

在ANSI?C的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令。第2种是执⾏环境,它⽤于实际执⾏代码。

2024-03-12 10:41:40 1103 1

原创 C语言⽂件操作

磁盘上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。上⾯说的适⽤于所有输⼊流⼀般指适⽤于标准输⼊流和其他输⼊流(如⽂件输⼊流);所有输出流⼀般指适⽤于标准输出流和其他输出流(如⽂件输出流)。

2024-03-11 19:42:07 785

原创 C语言动态内存管理经典笔试题

C/C++程序内存分配的⼏个区域:1. 栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中,效率很⾼,但是分配的内存容量有限。栈区主要存放运⾏函数⽽分配的局部变量、函数参数、返回数据、返回地址等。2. 堆区(heap):⼀般由程序员分配释放,?若程序员不释放,程序结束时可能由OS回收。分配⽅式类似于链表。3. 数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。

2024-03-11 15:37:16 1444

原创 C语言动态内存管理面(下)常⻅的动态内存的错误

我们接着C语言动态内存管理(上)没讲完整的继续来深度讲解。

2024-03-10 17:21:26 399 1

原创 C语言动态内存管理(上)

• 有时会我们发现过去申请的空间太⼩了,有时候我们⼜会觉得申请的空间过⼤了,那为了合理的时候内存,我们⼀定会对内存的⼤⼩做灵活的调整。当是情况2的时候,原有空间之后没有⾜够多的空间时,扩展的⽅法是:在堆空间上另找⼀个合适⼤⼩的连续空间来使⽤。当我们的p是int*的指针时,p+i就相当于p向后跳过i个字节的地址,那么我们就可以使用循环来完成访问的过程。的时候,要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发⽣变化。• 如果参数 ptr 指向的空间不是动态开辟的,那free函数的⾏为是未定义的。

2024-03-07 16:41:55 2541

原创 C语言⾃定义类型:联合和枚举

我们使用代码来演示使用枚举来定义 星期和颜色enum Day//星期Mon,Tues,Wed,Thur,Fri, //大括号中放的是枚举的可能取值Sat,Sunenum Color//颜⾊RED,GREEN,BLUE以上定义的 enum Day ,, enum Color 都是枚举类型。{ } 中的内容是枚举类型的可能取值,也叫 枚举常量。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

2024-03-06 08:45:22 1049 1

原创 C语言自定义类型之结构体

位段的声明和结构是类似的,有两个不同:1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以选择其他类型。2. 位段的成员名后边有⼀个冒号和⼀个数字.struct Aint _a:2;int _b:5;int _c:10;int _d:30;A就是⼀个位段类型那位段A所占内存的⼤⼩是多少?

2024-03-05 15:31:48 1368

原创 C语言指针超详细讲解(3)

在32位环境下,地址是32个二进制,需要4个字节,所以指针变量的大小就是4个字节.在64位环境下,地址是64个二进制,需要8个字节,所以指针变量的大小就是8个字节.在学习操作符的时候,我们学习了 sizeof , sizeof 计算变量所占内存内存空间⼤⼩的,单位是。关键点拨:指针变量的大小和类型无关,不管什么类型的指针变量,大小都是4/8个字节。字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。这个随机值是大于6的。因为&,取出的是整个数组的地址,所以跳过的是整个数组。

2024-03-03 15:29:28 899

原创 C语言中指针超详细讲解(2)

来为大家验证一下:假设有个Add函数来实现加法,有一个Sub函数来实现减法,那么我们尝试取出Add和Sub的地址.//字符指针数组 - 是一个数组 - 存放的是字符指针。上诉是我们没有使用指针数组写的程序,接下来我会为大家展示指针数组的作用之处了。这样操作起来是更加简单的,我们通过指针得到函数的地址,就可以调用它所指向的。函数指针数组 - 是数组 -存放的是函数指针 - 存放的是函数的地址。base:是一个指针指向待排序的第一个元素,是void*类型。类型的指针是用来存放任意类型数据的地址。

2024-02-28 16:52:13 545

原创 C语言中指针超详细讲解(1)

我们可以理解为数组名传参传的是首元素地址(上面讲到二维数组的首元素是一维数组,{1,2,3,4,5,}),那么我们就可以使用一个指针(*p)来指向这个一维数组(这个一维数组有五个元素)。其实很简单就是 *(p+i)的意思。可知,arr2中每个元素都是int* 类型的由于传的是首元素地址那么传的就是 int* 所以把一级指针取出来放入 int **arr(二级指针中)是没有问题的。1.sizeof(数组名),这里的数组名表示的是整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节。

2024-02-27 20:25:00 1288

原创 C语言中函数栈帧的创建于销毁

今天讲解的时候,使用环境是VS2013,不使用太高级编译器的原因是高级的编译器不容容易学习和观察。图中的esp,edp为main函数开辟了一段栈区用来维护main函数的运行,主函数从main函数开始执行。由于地址的跳动esp与edp也向上悦动,此时esp与edp之间的空间就是为main函数开辟的了。我们来解读一下,我们可以知道【ebp-14】的值是20(上面有讲解),此时出现了push(压栈)当我们在VS2013的编译器下是实现这个代码的时候我们可以了解到main的调用。使用上面的代码是Add函数。

2024-02-20 16:08:52 1028

空空如也

空空如也

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

TA关注的人

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