- 博客(81)
- 收藏
- 关注
原创 【Linux系统编程】库制作与原理
本文介绍了Linux系统编程中的库制作原理,主要包含以下内容: 库的概念:库是预编译的可复用代码,分为静态库(.a/.lib)和动态库(.so/.dll)两种形式 静态库特点:编译时链接到可执行文件,运行时不再需要 静态库制作示例:通过mystdio.h/c实现文件操作接口,展示了静态库的创建过程 默认情况下编译器优先使用动态库,可通过-static强制使用静态库 文章通过实际代码演示了如何封装文件操作接口并打包成静态库,为开发者提供了实用的库制作方法。
2025-12-03 13:56:36
926
20
原创 【Linux系统编程】Ext系列文件系统
本文介绍了Linux系统中Ext系列文件系统的底层原理。首先从磁盘物理结构入手,详细讲解了磁盘的CHS寻址方式(柱面、磁头、扇区)及其与LBA线性地址的转换关系。随后阐述了磁盘的逻辑结构,将三维磁盘空间抽象为一维数组进行管理。接着引入文件系统概念,解释了"块"(多个扇区组成)、分区(基于柱面划分)和inode(存储文件元信息)等核心机制。文章通过大量图示和公式,系统性地剖析了文件系统如何组织和管理磁盘空间,为理解Linux文件系统的工作原理奠定了基础。
2025-11-26 16:05:20
1018
19
原创 【Linux系统编程】基础IO
本文介绍了Linux系统编程中的基础IO操作,重点分析了文件的概念和C语言文件接口的使用。主要内容包括:1)文件由内容和属性组成,所有操作分为对内容或属性的操作;2)文件必须由进程动态打开,通过路径或当前工作目录定位;3)打开文件实质是将文件从磁盘加载到内存;4)操作系统通过"先描述再组织"的方式管理大量打开的文件;5)回顾了C语言中fopen、fputs、fgets等文件操作函数的使用方法,并通过示例代码演示了文件的打开、写入和读取操作。文章为理解Linux文件系统提供了基础概念框架。
2025-11-20 20:29:21
700
21
原创 【Linux系统编程】进程控制
本文介绍了Linux系统编程中进程控制的关键内容,包括进程创建、终止和写时拷贝机制。重点解析了fork函数的工作原理:通过复制父进程的内核结构创建子进程,采用写时拷贝技术优化资源使用,并详细说明了父子进程的调度分离。文章还探讨了循环创建多个进程的正确方法,强调子进程必须立即退出循环以避免进程爆炸。此外,深入分析了进程退出的三种场景和退出码的意义,以及写时拷贝如何通过缺页中断实现内存高效管理。这些知识为理解Linux进程机制提供了重要基础。
2025-11-16 12:54:42
628
19
原创 【Linux系统编程】进程概念(四)进程优先级、进程切换、环境变量和程序地址空间
本文详细介绍了Linux进程管理的核心概念,包括进程优先级(PRI/NI)、竞争性与独立性等进程特性。重点讲解了进程切换机制中的上下文保存与恢复原理,以及环境变量的定义、获取方式和全局属性。最后深入剖析了程序地址空间的布局(代码段、数据段、堆栈等)及其背后的页表管理、缺页处理和写时复制等关键技术,揭示了虚拟地址空间如何实现内存隔离和保护。这些知识对理解Linux系统编程至关重要。
2025-11-10 10:29:43
973
20
原创 【Linux系统编程】进程概念(三)进程状态
本文介绍了Linux系统中的进程状态,包括教材中的三大基本状态(运行、阻塞、挂起)和Linux特有的进程状态。运行状态(R)表示进程在CPU或运行队列中;睡眠状态(S)是可中断的阻塞状态;磁盘休眠状态(D)是不可中断的深度睡眠,防止关键IO操作被终止;停止状态(T)可通过信号暂停和恢复进程。文章通过代码示例演示了不同状态的表现,并解释了状态转换的原理,特别是深度睡眠状态对数据安全的重要保护作用。
2025-11-05 16:53:46
1043
22
原创 【Linux系统编程】进程概念(二)进程的概念和基本操作
本文摘要主要介绍了Linux系统编程中的进程概念及其相关操作。内容涵盖:1.进程本质由程序代码数据和PCB(进程控制块)组成,Linux中PCB实现为task_struct结构体;2.进程基本操作包括查看进程信息(ps命令)、获取进程ID(getpid)等;3.重点讲解了进程创建(fork函数),包括父子进程关系、fork返回值机制(子进程返回0,父进程返回子进程PID)及示例代码演示。文章通过具体命令和代码示例,帮助读者深入理解Linux进程管理机制。
2025-11-03 12:01:20
589
34
原创 【Linux系统编程】进程概念(一)冯诺依曼体系结构、操作系统
本文系统介绍了冯诺依曼体系结构和操作系统核心概念。冯诺依曼体系包含输入设备、存储器、运算器、控制器和输出设备五大部件,通过内存缓冲解决外设与CPU速度差异问题,实现了计算机性价比最优。操作系统作为管理软件,通过"先描述再组织"的方法(创建数据结构并组织)管理软硬件资源,为上层程序提供执行环境。文章还解析了系统调用与库函数的关系,并通过选择题巩固知识点。最后指出计算机本质是按程序指令处理数据,操作系统管理的关键在于对数据结构进行增删查改。
2025-11-01 20:54:11
1137
30
原创 【Linux系统编程】调试器-gdb/cgdb
本文介绍了Linux下使用gdb/cgdb进行程序调试的方法。主要内容包括:1) 对比Debug和Release版本程序的差异,使用-g选项编译生成带调试信息的程序;2) 详细讲解gdb/cgdb基本命令,如断点设置(b)、运行(r)、单步调试(n/s)、变量查看(p/display)等;3) 演示了set var修改变量、watch监视变量、条件断点等高级调试技巧。cgdb作为gdb的增强版本,提供可视化界面使调试更直观。通过示例程序展示了如何快速定位和修复代码逻辑错误。
2025-10-31 16:08:11
835
38
原创 【Linux系统编程】自动化构建-make/Makefile
本文介绍了Linux系统编程中make/Makefile工具的基本使用方法和进阶技巧。make能够实现自动化构建和增量编译,通过检查文件修改时间仅重新编译必要部分,大幅提升开发效率。Makefile的核心由目标、依赖和命令组成,支持变量定义和通配符简化编写。文章通过具体案例演示了从简单到复杂的Makefile编写方式,并重点讲解了头文件依赖关系的重要性,强调在依赖项中正确包含头文件的必要性。最后介绍了使用变量和通配符等进阶技巧,使Makefile更具可维护性。
2025-10-29 12:33:56
814
44
原创 【Linux系统编程】编译器gcc/g++
本文介绍了Linux系统编程中gcc/g++编译器的使用方法和编译原理。主要内容包括:1)普通用户通过修改/etc/sudoers文件实现sudo提权;2)gcc/g++的基本使用方式,编译C/C++程序并生成可执行文件;3)详细讲解gcc/g++编译的四个阶段:预处理、编译、汇编和链接,以及各阶段的命令和输出文件;4)对比分析动态链接和静态链接的特点及优缺点;5)介绍gcc/g++常用编译选项,如-E、-S、-c、-o等。通过实例演示了条件编译的应用场景,并比较了动态库和静态库生成的可执行文件大小差异。
2025-10-26 10:53:52
619
16
原创 【Linux系统编程】编辑器vim
本文介绍了Linux系统下vim编辑器的基本使用方法和常用命令。vim包含命令模式、编辑模式和底行模式三种基本模式,并通过Esc键、冒号键等实现模式切换。文章详细讲解了行号显示、光标移动、复制粘贴、撤销重做、查找替换等常用操作,并演示了多行注释、分屏编辑等高级功能。最后说明了如何通过.vimrc文件进行个性化配置,如语法高亮、行号显示等。vim作为高效文本编辑器,掌握其基本操作对Linux系统编程至关重要。
2025-10-25 13:49:44
1316
18
原创 【Linux系统编程】软件包管理器
本文介绍了Linux系统中的软件包管理机制,重点讲解了yum和apt两种主流包管理器的使用。主要内容包括:软件包的概念及其管理器的核心功能;Linux软件生态的运作流程;通过具体命令演示了软件包的查看、安装和卸载操作;分享了有趣命令的安装方法;并说明了软件源配置的重要性及更新方法。文章特别强调了网络连接对包管理操作的必要性,并推荐配置国内镜像源以提升下载速度,为Linux初学者提供了实用的软件管理指南。
2025-10-23 11:27:00
944
28
原创 【Linux系统编程】权限的概念
本文介绍了Linux系统的权限管理机制。主要内容包括:1)Linux用户分为超级用户(root)和普通用户,可通过su命令切换;2)文件访问者分为所有者(u)、所属组(g)和其他用户(o),权限包括读(r)、写(w)、执行(x);3)权限表示方法有字符表示法和八进制数值表示法;4)权限设置命令如chmod、chown、chgrp、umask的使用方法;5)目录权限的特殊性及粘滞位的作用。文章详细说明了如何通过权限设置实现Linux系统的安全访问控制,包括文件/目录权限管理、用户切换和特殊权限设置等核心概念。
2025-10-21 20:29:27
949
36
原创 C++IO库
本文介绍了C++标准库中的IO流系统,主要包括以下内容:1)IO继承家族类结构,展示了iostream、fstream等类的继承关系;2)IO流状态管理,包括goodbit、eofbit等状态标志及其处理方法;3)输出缓冲区管理机制,解释了缓冲区的刷新条件和优化技巧;4)标准IO流的使用,包括cin/cout的基本操作和类型转换;5)文件IO流的基本概念,说明ofstream、ifstream的功能。文章通过代码示例演示了流状态检测、缓冲区控制等关键操作技巧,并提供了相关参考文档链接。
2025-10-18 15:51:35
1071
26
原创 C++类型转换
C中的类型转换:隐式类型转换、显式强制类型转换;C++中的类型转换:内置类型到⾃定义类型之间的转换,内置类型转成⾃定义类型需要构造函数的⽀持,⾃定义类型转成内置类型,需要operator类型()的函数去⽀持。⾃定义类型到⾃定义类型之间的转换,需要对应类型的构造函数⽀持即可;举例自定义类型iterator和自定义类型const_iterator的转换;C++类型安全问题;4个显式强制类型转换运算符static_cast、reinterpret_cast、const_cast、dynamic_cast;RTTI
2025-10-17 13:31:52
1076
30
原创 C++11智能指针的使用及原理
本文介绍了C++11智能指针的使用场景、设计原理及标准库实现。主要内容包括:1) 通过异常处理案例展示传统指针管理内存的缺陷;2) 基于RAII思想设计智能指针类,利用对象生命周期自动管理资源;3) 分析标准库中auto_ptr、unique_ptr、shared_ptr和weak_ptr的特性差异,重点说明unique_ptr的独占所有权和shared_ptr的引用计数机制;4) 介绍智能指针的特化版本、删除器定制等高级用法。智能指针能有效避免内存泄漏,简化资源管理,是C++现代编程的重要工具。
2025-10-17 12:00:00
713
23
原创 C++异常
本文介绍了C++异常处理机制,包括异常的基本概念、抛出和捕获方式、栈展开过程以及继承体系中的异常处理。异常机制允许程序在运行时检测和处理问题,相比C语言的错误码更加灵活全面。文章通过代码示例展示了异常匹配规则、基类捕获派生类异常的方法,以及异常重新抛出的应用场景(如网络消息发送失败时的重试机制)。此外,还介绍了异常处理中的栈展开过程,当异常未被捕获时程序将终止运行。异常处理是大型项目中重要的错误管理手段,通过继承体系可以实现模块化的错误分类和处理。
2025-10-16 12:00:00
568
28
原创 C++11(lambda和包装器)
C++11中的lambda表达式和包装器提供了更灵活的函数对象定义方式。lambda表达式语法简洁,支持捕捉列表传递上下文变量,可替代传统函数指针和仿函数对象。其底层实现是编译器生成匿名类对象,通过捕获列表存储变量。包装器function可以统一处理各种可调用对象(函数指针、仿函数、lambda等),解决模板参数推导问题。lambda在排序、线程函数等场景中应用广泛,极大提升了C++的函数式编程能力。
2025-10-15 12:00:00
793
12
原创 C++11(可变参数模板、新的类功能和STL中的一些变化)
C++11引入了可变参数模板、新的类功能和STL改进。可变参数模板支持数量和类型可变的参数,通过参数包和包扩展实现灵活的函数和类模板。STL新增了emplace系列接口(如emplace_back),允许直接在容器内构造对象,避免了临时对象的拷贝,提升了效率。这些特性增强了泛型编程能力,优化了性能,使代码更简洁高效。
2025-10-13 10:08:27
1125
34
原创 用哈希表封装unordered_set和unordered_map
封装哈希表实现unordered_map和unordered_set:1、实现哈希表;2、封装unordered_map和unordered_map框架,解决KeyOfT;3、iterator;4、const_iterator;5、key不支持修改的问题;6、operator[]
2025-10-02 21:57:29
968
16
原创 unordered_map和unordered_set的使用以及哈希表的实现
unordered系列的使用、哈希概念、处理哈希冲突的两种方法:开放地址法、链地址法;哈希相关例题
2025-10-01 14:43:43
975
12
原创 封装红黑树实现mymap和myset
封装红黑树实现mymap和myset:1、实现红黑树;2、封装map和set框架,解决KeyOfT;3、iterator;4、const_iterator;5、key不支持修改的问题;6、operator[]
2025-09-27 16:38:53
754
14
原创 红黑树的实现
红黑树是一种自平衡二叉搜索树,通过颜色约束规则确保最长路径不超过最短路径的2倍。其主要特性包括:节点为红或黑色、根节点为黑、红色节点的子节点必须为黑、从任一节点到其NULL子节点的路径包含相同数量的黑节点。插入操作分三种情况处理:变色(当叔节点为红)、单旋+变色(叔节点为黑且形成直线结构)、双旋+变色(叔节点为黑且形成折线结构)。红黑树通过颜色规则和旋转操作保持近似平衡,其增删查改时间复杂度为O(logN),相比AVL树旋转次数更少。
2025-09-25 10:38:07
716
36
原创 AVL树的实现
AVL树是一种高度平衡的二叉搜索树,通过平衡因子(右子树高度减左子树高度)确保任意节点左右子树高度差不超过1。插入节点时需更新路径上的平衡因子,当平衡因子变为±2时进行旋转调整(左/右单旋或左右/右左双旋)以恢复平衡。旋转操作既要保持二叉搜索树性质,又要降低子树高度。AVL树的平衡性使其查找、插入、删除操作的时间复杂度稳定在O(logN)。文中提供了AVL树节点结构定义、插入操作及右单旋的具体代码实现,展示了如何通过旋转处理不平衡情况。
2025-09-22 10:46:26
905
30
原创 二叉搜索树
二叉搜索树的概念、二叉搜索树的性能分析、二叉搜索树的插入、二叉搜索树的查找、二叉搜索树的删除、二叉搜索树的实现代码、二叉搜索树key和key/value使用场景、key/value二叉搜索树代码实现
2025-07-31 20:03:41
1176
8
原创 C++多态
多态的概念、多态的定义及实现、虚函数、虚函数的重写、协变、析构函数的重写、C++11的override和final、重载/重写/隐藏对比、纯虚函数和抽象类、多态的原理、虚函数表指针、单继承和多继承虚函数表深入探索、继承章节的虚基表问题、继承和多态考察的常见问题
2025-07-30 23:11:42
1246
28
原创 C++继承
继承的概念及定义、基类和派生类间的转换、继承中的作用域、派生类的默认成员函数、继承与友元、继承与静态成员、多继承及其菱形继承问题、扩展:菱形虚拟继承原理剖析、继承和组合、继承的几个选择题
2025-07-29 17:28:25
1199
36
原创 【Linux系统编程】基础指令
本文介绍了Linux系统下的基础指令操作,主要包括用户管理、文件操作和帮助查询三大类。用户管理部分涵盖adduser、passwd、userdel指令;文件操作部分包括pwd、ls、cd、tree、touch、mkdir、rmdir、rm等指令,详细讲解了文件路径、属性修改、目录创建与删除等操作;最后介绍了man指令的使用方法,用于查询命令帮助文档。文章通过语法说明、功能解释和示例截图,全面展示了Linux基础指令的使用场景和技巧。
2025-07-23 23:10:16
1566
28
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅