自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux(14)——库的制作与原理

编程库技术指南:从基础到实践 文章摘要: 本文系统介绍编程库的核心概念与技术要点,涵盖静态库(.a)与动态库(.so)的制作流程差异,包括gcc编译命令实例。深入解析库的设计原则(模块化/接口设计/兼容性)和内部原理(符号表/内存映射),并提供跨平台开发注意事项和性能调试技巧(nm/ldd工具)。通过现代开发实践(CI/CD测试/Doxygen文档)指导,帮助开发者掌握从库设计到部署的全流程技术栈。150字

2025-06-07 23:34:52 159

原创 Linux(13)——Ext系列文件系统

本文介绍了磁盘的基本结构与文件系统的关联。磁盘以扇区为基本单位,通过CHS(柱面、磁头、扇区)和LBA(逻辑块地址)实现寻址,现代操作系统通过块(如4KB)进行管理。为简化管理,大磁盘被划分为多个分区,分区再细分为块组。ext2文件系统通过超级块、块组描述符、inode表等结构维护文件元数据和数据内容。文件的元信息由inode保存。软链接是独立文件,保存目标路径;硬链接共享inode,相当于同一文件的多个名称。

2025-06-07 23:31:47 384

原创 Linux(13)——Ext系列⽂件系统

磁盘由多个盘片组成,每个盘片分为多个同心圆的磁道,磁道又被划分为扇区。盘片两面有磁头进行读写操作。**LBA(逻辑块地址)**是现代磁盘采用的线性寻址方式,将整个磁盘空间按顺序编号。操作系统通常使用LBA,磁盘控制器自动转换为CHS。可查看inode编号验证连接类型。,物理结构影响数据存取效率。内核维护挂载点信息,通过。)、inode数量等。参数可指定块大小(如。

2025-06-05 22:53:21 383

原创 Linux(12)——基础IO(下)

本文摘要: 文章探讨了Linux系统中的重定向机制、缓冲区概念和FILE结构体。首先介绍了输出重定向、输入重定向和追加重定向的实现原理,通过关闭标准文件描述符并重新分配,验证了重定向的基本逻辑。其次分析了缓冲区的作用及其三种类型(全缓冲、行缓冲、无缓冲),解释了缓冲区在不同场景下的刷新机制。最后解析了FILE结构体的内部实现,说明其封装了文件描述符和缓冲区的管理功能。文章通过代码示例和理论分析,揭示了Linux系统调用与用户层库函数之间的协作关系,帮助理解"一切皆文件"的设计思想。

2025-06-05 16:58:34 1365 14

原创 Linux(11)——基础IO(上)

文件由内容和元数据构成,即使大小为0也会占用存储空间。访问文件需通过进程完成,本质上是操作系统对文件的系统调用。操作系统采用"先描述,再组织"的方式管理被打开的文件,包括记录文件属性和组织文件资源。这体现了操作系统对文件系统资源的统一管理机制。

2025-06-02 23:56:02 208 13

原创 Linux(10)——第二个小程序(自制shell)

本文介绍了一个简化版 Linux Shell 的实现过程,作为对进程管理、文件重定向及环境变量等知识的综合应用。主要功能包括环境变量初始化、动态命令提示符生成、命令读取与解析、内建命令(如 `cd`、`echo`)的识别与执行,以及输入输出重定向的处理。通过使用如 `fgets`、`strtok`、`execvp`、`dup2` 等系统函数,Shell 能完成命令解析与进程控制。同时,主循环逻辑清晰,逐步处理输入、重定向、解析及执行,构建了一个完整的 Shell 执行流程。

2025-06-02 17:52:34 1668 29

原创 Linux(9)——进程(控制篇——下)

下面进程等待使用的两个方法wait方法和waitpid方法都有一个status参数,这是一个输出型参数(输出型参数是函数中用于返回结果或修改调用者变量的参数,通常通过引用或指针实现。),由操作系统进行填写。我们从图中可见,status的低16比特位中,高8位表示进程的退出状态,即退出码。当进程被信息杀亖时,则低7位表示终止信息,第8位时core dump标志。否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程。参数:输出型参数,获取子进程退出状态,不关心则可以设置成为NULL。

2025-05-30 22:03:39 662 7

原创 Linux(8)——进程(控制篇——上)

本文主要探讨Linux系统中进程创建与终止的相关机制。在进程创建方面,重点分析了fork函数的工作原理,包括其返回值机制、写时拷贝技术及其应用场景。fork创建子进程时通过共享代码数据实现高效内存管理,仅在修改时进行数据拷贝。在进程终止方面,介绍了三种正常退出方式(return、exit、_exit)及其区别,以及异常退出的情况。文章还详细解析了进程退出码的意义,说明0表示成功而非0代表不同类型的错误。通过代码示例和系统命令验证了这些机制的实际表现,为理解Linux进程管理提供了实用参考。

2025-05-30 18:18:39 892

原创 Linux(7)——进程(概念篇)

程序的一个执行实例,正在执行的程序等担当分配系统资源(CPU时间,内存)的实体。我们知道,我们在写代码的时候,你的代码进行编译链接后生成可执行文件,这个文件就在磁盘当中,当我们双击这个文件之后,该文件就被加载到了内存之中,因为只有加载到了内存之中才能被cpu逐语句执行。而加载了内存中的程序,不再是程序而应该是进程。

2025-05-24 21:50:47 1438 3

原创 Linux(6)——第一个小程序(进度条)

首先,我们来见一见行缓冲区,对比下面两个代码就可以理解了。这个的结果毋庸置疑了就是:那么如果我们修改一下这个代码呢,比如这样:结果又如何呢,我们运行一下:我们惊奇的发现,居然和原来完全不一样,这个代码显示的是先休眠3秒再打印出hello world。这也就说明了有行缓冲区的存在。

2025-05-24 11:55:23 419

原创 Linux(5)——再谈操作系统

操作系统是介于计算机硬件与用户应用程序之间的中介。它的主要任务是管理计算机的硬件资源,并为用户提供一个友好、便捷的操作界面。虽然操作系统本身很复杂,但只要我们从基本概念出发,逐步深入,就会发现它其实是个非常有趣、充满智慧的系统。希望这篇博客能帮你对操作系统有一个初步的了解,今后在学习或使用中更加得心应手!

2025-05-23 21:04:57 408 1

原创 Linux (4)——冯诺依曼体系结构、操作系统及进程

我们在这一节中简单的介绍了冯诺依曼体系结构,了解了该结构是如何解决cpu是如何与外设之间进行交互的,也就是通过内存进行交互,然后简单介绍了一下系统调用和库函数,最后我们简单的介绍了一下进程,了解了fork()函数。

2025-05-23 16:34:22 944

原创 Linux(3)——基础开发工具

定义:是基于 RPM(Red Hat Package Manager)的软件包管理工具,主要用于Red Hat 系列 Linux 系统(如 RHEL、CentOS、Fedora 等),用于自动化安装、更新、卸载软件包,以及管理软件包之间的依赖关系,一次性解决安装的问题。一个云服务器在同一时间只允许一个yum进行安装,不能在同一时刻安装多个软件。

2025-05-20 23:33:33 1231 3

原创 基本算法——位运算

快速幂算法通过二进制拆分和倍增思想,将幂运算的时间复杂度从O(n)优化到O(logn),特别适用于大数幂或模幂运算。其核心在于利用指数的二进制表示,逐步计算幂次并减少乘法次数。动态规划则通过分解问题为子问题,并存储子问题的解以优化计算,适用于具有重叠子问题和最优子结构的问题。状态压缩则通过位运算等技术减少动态规划的空间复杂度。贪心算法通过每一步选择局部最优解,不进行回退或全组合尝试,适用于求取最优解的问题。这些算法在计算效率和资源优化方面具有重要意义,广泛应用于加密、路径优化和资源分配等领域。

2025-05-20 00:31:37 1347

原创 Linux(2)——shell原理及Linux中的权限

该提示是说你没有被超级用户(root)添加到信用列表(sudoers)当中,所以该条指令的权限得不到提升(你可以想想嘛,怎么可能让一个普通用户随意更改另一个普通用户的密码),只有当你被超级用户添加到信任列表后,你才拥有提升当前指令权限的能力。但实际上你会发现,你所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)(2)将核心处理的结果返回给给用户。

2025-05-18 18:53:37 787

原创 C++基础(12)——初识list

1.列表是序列容器,允许在序列内的任何位置进行恒定时间插入和擦除操作,以及在两个方向上的迭代。2.列表容器实现为双向链接列表;双向链接列表可以将它们包含的每个元素存储在不同且不相关的存储位置。通过与到它之前的元素的链接和到它之后的元素的链接的每个元素的关联,在内部保持排序。3.它们非常类似于: 主要区别在于对象是单链表,因此它们只能向前迭代,以换取更小和更高效。4.与其他碱基标准序列容器相比 (arrayvector和deque。

2024-10-07 19:56:58 1388 1

原创 C++(11)——vector的具体实现

时,使用memcpy函数是没什么问题的,但当vector存储的数据是。

2024-10-06 17:47:50 1564

原创 C++基础(10)——初识vector

方式一:(无参构造)方式二:(构造并初始化n个val )方式三:(拷贝构造)方式四:(迭代器构造)

2024-10-06 11:02:52 1057

原创 C++基础(9)——string类的模拟实现

最好是定义在自己的命名空间里面,避免和已有的冲突。

2024-10-05 16:55:11 1294

原创 C++基础(8)——string的相关面试题

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。输入的字符串包括数字字母符号,可以为空。输入:"+2147483647"输出:“2147483647”分两步进行:1.先判断除第一个字符以外的其他字符,若不满足题意,则返回0,若满足则进行计算;2.最后判断第一个字符,若还是字符则进行计算并返回,若是正负号则加正负号返回,若都不是则返回0;

2024-10-05 10:35:51 509

原创 C++基础(7)——STL简介及string类

是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。string();//构造一个空字符串//用C-string构造string类//用C-string的前n个字符构造string类//用n个c字符构造string类//拷贝构造//用从pos位置开始的长度为len的字串来构造string类string s1;

2024-10-03 23:43:05 1440

原创 C++基础(6)——模板初阶

class 类模板名//类内成员声明public:_size = 0;// 扩容++_size;注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。除此之外,类模板不支持分离编译,即声明在x.h文件中,而定义却在x.cpp文件中。

2024-10-03 17:05:36 892

原创 C++基础(5)——内存管理

new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对 象空间的申请。

2024-10-01 20:51:47 1062

原创 C++基础(4)——类和对象(下)

1.之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成 员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地⽅。2.引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始 化,否则会编译报错。

2024-09-17 15:09:22 1154

原创 Linux(1)——Linux基本指令

ls [选项][目录或文件]对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。如:ls –d 指定目录-i 输出文件的 i 节点的索引信息。如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件-l 列出文件的详细信息。-n 用数字的 UID,GID 代替名称。

2024-09-17 11:18:17 1647 4

原创 C++基础(3)——类和对象(中)

构造函数的特点:1. 函数名与类名相同。2. ⽆返回值。(返回值啥都不需要给,也不需要写void,不要纠结,C++规定如此)3. 对象实例化时系统会⾃动调⽤对应的构造函数。4. 构造函数可以重载。5. 如果类中没有显式定义构造函数,则C++编译器会⾃动⽣成⼀个⽆参的默认构造函数,⼀旦⽤⼾显式定义编译器将不再⽣成。6. ⽆参构造函数、全缺省构造函数、我们不写构造时编译器默认⽣成的构造函数,都叫做默认构造函 数。但是这三个函数有且只有⼀个存在,不能同时存在。

2024-09-17 10:32:38 907

原创 C++基础(2)——类和对象(上)

• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_或者m 开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。

2024-08-31 21:27:08 1274

原创 C++基础(1)——入门知识

• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。• C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。

2024-08-31 20:09:43 1204

原创 数据结构初阶(4)——二叉树

的。

2024-08-23 23:59:10 1015

原创 数据结构初阶(3)——栈和队列

其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出。栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。栈的删除操作叫做出栈。

2024-08-23 17:44:50 611

原创 数据结构初阶(2)——链表OJ

思路:先找中间节点,然后将节点后逆置,最后一一比较。思路:先判断是否相交,再计算长度差值,再一一比较。思路:快慢指针,快指针先走k格,慢指针同步。

2024-08-21 23:27:36 495

原创 数据结构初阶(1)——算法的时间复杂度和空间复杂度

它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知 道。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。6. 实例6基本操作执行最好1次,最坏O(logN)次,时间复杂度为 O(logN) ps:logN在算法分析中表示是底 数为2,对数为N。5. 实例5基本操作执行最好N次,最坏执行了(N*(N-1)/2次,通过推导大O阶方法+时间复杂度一般看最 坏,时间复杂度为 O(N^2)

2024-08-21 15:47:59 1408

原创 C语言(18)——双向链表专题

注意:这⾥的“带头”跟前⾯我们说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严 谨,但是为了同学们更好的理解就直接称为单链表的头节点。

2024-08-19 22:46:17 354

原创 C语言(17)——单链表的应用

据说著名犹太历史学家Josephus有过以下的故事:在罗⻢⼈占领乔塔帕特后,39个犹太⼈与 Josephus及他的朋友躲到⼀个洞中,39个犹太⼈决定宁愿死也不要被⼈抓到,于是决定了⼀个⾃杀 ⽅式,41个⼈排成⼀个圆圈,由第1个⼈开始报数,每报数到第3⼈该⼈就必须⾃杀,然后再由下⼀ 个重新报数,直到所有⼈都⾃杀⾝亡为⽌。然⽽Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与⾃⼰安排在 第16个与第31个位置,于是逃过了这场死亡游戏。著名的Josephus问题。

2024-08-18 23:41:46 567

原创 C语言(16)——初识单链表

1、链式机构在逻辑上是连续的,在物理结构上不⼀定连续2、节点⼀般是从堆上申请的3、从堆上申请来的空间,是按照⼀定策略分配出来的,每次申请的空间可能连续,可能不连续。

2024-08-17 22:00:35 490 1

原创 C语言(15)——顺序表的应用

2.若src指向的值不为val,nums[dst]=nums[src],dst++,src++将nums2中数据依次放入到num1数组的后面,然后用排序算法对nums1进行排序。2)能够保存⽤⼾信息:名字、性别、年龄、电话、地址等。1.若src指向的值为val,则src++1)⾄少能够存储100个⼈的通讯信息。创建两个变量:src,dst。

2024-08-17 10:24:01 636 1

原创 C语言(14)——初识顺序表

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

2024-08-16 00:15:50 310 1

原创 C语言(13)——编译与链接

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

2024-08-14 14:33:55 927 2

原创 C语言(12)——文件的读写

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

2024-08-14 12:02:24 773 2

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

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

2024-08-13 14:51:02 1169 2

空空如也

空空如也

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

TA关注的人

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