自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

记录我一步步的学习历程,期待无限进步,向星举目!

记录我一步步的学习历程,期待无限进步,向星举目!

  • 博客(100)
  • 收藏
  • 关注

原创 【项目】JsonRpc框架——功能测试、项目总结

本文介绍了一个基于JSON-RPC的远程调用框架,支持服务注册与发现、消息发布订阅功能。功能测试分为三部分:1)两台主机直接RPC调用测试,展示了同步、异步和回调三种调用方式;2)基于注册中心的服务注册与发现测试,包含服务提供者和消费者示例;3)消息主题的发布订阅功能测试(未展示完整代码)。测试案例包含加法服务,验证了参数类型检查和异常处理能力。项目使用C++17开发,依赖JsonCpp和muduo网络库,通过Makefile编译。

2026-06-06 22:35:34 898 32

原创 【项目】JsonRpc框架——开发实现2(业务层)

本文介绍了RPC框架中两个核心模块的实现:Dispatcher模块和Requestor模块。Dispatcher模块作为消息分发中心,通过哈希表存储消息类型与回调函数的映射关系,并使用多态技术解决不同类型回调函数的统一存储问题。Requestor模块负责管理客户端请求,通过请求ID关联请求与响应,支持同步阻塞和异步回调两种响应处理方式,其中异步处理通过promise/future机制实现。这两个模块共同构成了RPC框架的基础通信架构,实现了消息的灵活分发和请求响应的高效管理。

2026-06-06 14:15:19 339 35

原创 【项目】JsonRpc框架——开发实现1(细节功能、字段定义、抽象层、具象层)

文章摘要 本文介绍了一个基于C++实现的线程安全日志系统,采用单例模式和策略模式设计。系统提供三种日志刷新策略:控制台输出(ConsoleStrategy)、文件写入(FileStrategy)和按日志等级分文件存储(FileLevelStrategy)。通过Mutex类封装pthread互斥锁,配合RAII风格的LockGuard实现线程安全。日志支持四种级别(INFO/WARNING/ERROR/FATAL),包含时间戳、进程ID等上下文信息,并自动处理日志目录创建。该系统可帮助开发者快速定位程序运行中

2026-06-04 20:44:27 488 18

原创 【项目】JsonRpc框架——功能分析与模块划分设计

这篇文章主要介绍了RPC(远程过程调用)系统的设计与实现方案。文章首先分析了RPC的基本功能需求,包括远程调用、服务注册与发现、消息发布订阅三大核心功能。然后详细阐述了分布式架构的设计思路,通过引入注册中心解决单点故障问题,并支持负载均衡。 在模块划分方面,文章提出了服务端的七个关键模块:网络通信模块(基于Muduo库)、应用层协议模块(采用LV格式解决粘包问题)、消息分发模块、RPC路由模块、发布订阅模块、服务注册发现模块以及整合模块。每个模块都有明确的功能定位和设计思路,如RPC路由模块需要实现服务描述

2026-06-04 08:34:06 923 46

原创 【算法札记】练习 | Week5

摘要 本文包含多个编程题目的解法: 笨小猴:统计字符串中各字母出现次数的最大值与最小值差,判断是否为质数。 主持人调度:检查区间是否重叠,通过排序后比较相邻区间端点实现。 分割等和子集:转换为01背包问题,判断是否能选出总和为一半的子集。 小红的ABC:寻找最短回文子串,只需检查长度为2或3的子串。 不相邻取数:类似打家劫舍问题,动态规划求解不相邻元素的最大和。 空调遥控:滑动窗口维护区间极差,统计满足条件的窗口数量。 涉及算法:模拟、排序、动态规划(背包/线性DP)、字符串处理、滑动窗口等。

2026-06-03 19:58:59 215 2

原创 【项目】C++从零实现JsonRpc框架——项目引入

本文介绍了一个基于C++实现的简易RPC通信框架,使用JsonCpp库进行序列化/反序列化,muduo网络库处理底层通信。该框架支持同步/异步调用、服务注册发现、负载均衡等功能,通过JSON格式传输参数和返回值,使开发者无需关注网络细节即可快速实现远程调用。文章详细讲解了JsonCpp的核心类和使用方法,并简要介绍了muduo库的高性能网络架构特点。该RPC框架设计简洁高效,适合快速开发分布式系统服务。

2026-06-01 16:27:39 667 13

原创 【算法札记】练习 | Week4

那么,如果数组中的数经过若干次乘2操作后,只会改变t的大小,所以可以得出结论:如果能够变换成功,数组中的数的k值一定都相同!左右双指针,从第一个和最后一个字符串向中间判断,看看两个字符串中有没有相同的字符。枚举B串中每个长度等于A串的长度,看看这两个串同一位置上不同的字符个数。长度固定为原串长度一半的滑动窗口,因为要想符合要求,必定是一半一半的。floodfill问题,这道题可以用bfs/dfs/并查集解决。将字符串排序后,丢进能去重的哈希表里面即可。简单的子序列问题,区间dp。,k为奇数,t为非负整数。

2026-05-19 10:42:57 509 16

原创 【算法札记】练习 | Week3

本文总结了五个编程问题的解法:1) 牛牛冲钻五模拟题,通过统计胜负计算得分;2) 最长无重复子数组问题,使用滑动窗口和哈希表求解;3) 字符串重排问题,采用贪心算法优先处理高频字符;4) 乒乓球筐问题,通过哈希表验证字符包含关系;5) 组队竞赛问题,利用排序和贪心策略求最优解。这些问题涵盖了模拟、滑动窗口、贪心、哈希和动态规划等多种算法技巧,展示了不同场景下的编程解决方案。

2026-05-13 10:41:27 855 16

原创 【网络】应用层自定义协议——序列化和反序列化的概念与方法(Json),以一个网络计算器为例

应用层协议与序列化技术 本文探讨了应用层协议的必要性及序列化/反序列化技术。主要内容包括: 应用层协议的必要性: 应用层数据需要转换为字符串或字节流传输(序列化/反序列化) TCP协议存在数据粘包问题,应用层协议需保证数据完整性 TCP通过发送/接收缓冲区实现全双工通信 序列化方法: 介绍了JSON序列化工具jsoncpp的使用方法 演示了C++中JSON数据的序列化和反序列化过程 网络计算器实例: 采用分层架构设计(业务处理层、协议层、服务通信层) 使用模板方法模式封装套接字类 展示了TCP套接字的核心实

2026-05-09 11:27:23 1945 78

原创 【网络】TCP与UDP协议使用指南,Socket编程实现Echo服务

本文介绍了TCP和UDP协议的核心特点及网络编程基础。主要内容包括: TCP与UDP协议对比 TCP是面向连接、可靠传输的字节流协议 UDP是无连接、不可靠传输的数据报协议 网络字节序规范 网络传输统一使用大端模式 提供htonl/htons等函数进行主机序和网络序转换 Socket编程核心接口 创建socket和绑定IP端口的基本方法 UDP使用recvfrom/sendto进行数据收发 TCP通过listen/accept/connect建立连接 连接建立后可使用read/write通信

2026-05-06 13:44:00 2410 70

原创 【网络】计算机网络世界的基础概念

计算机网络的发展源于协作需求,经历了单机→局域网→广域网的演进。通信需要协议约定数据格式与规则,OSI七层模型与TCP/IP五层模型通过分层解决数据传输、寻址、可靠性等问题。TCP/IP协议栈通过封装与解包实现通信,数据链路层用MAC地址标识设备,网络层用IP地址实现跨网络寻址。局域网内通过MAC地址直接通信,跨网络时IP地址保持不变,MAC地址逐跳更新,路由器根据IP地址选择路径。分层设计与协议协同保障了全球互联网的高效互联。

2026-05-01 16:19:45 565 16

原创 【Linux系统】总结线程:死锁问题、实现带有日志模块的线程池类

本文主要讨论了死锁问题和日志功能的实现。首先解释了死锁的概念及其四个必要条件(互斥、请求与保持、不可剥夺、循环等待),并指出破坏任一条件即可避免死锁。随后详细介绍了日志功能的设计与实现,采用策略模式支持多种日志输出方式(控制台输出、文件写入等)。文章提供了完整的C++代码实现,包括日志等级枚举、基础策略类以及具体的文件写入策略类实现,展示了如何通过面向对象设计实现灵活可扩展的日志系统。

2026-04-26 18:09:21 1336 70

原创 【算法札记】练习 | Week2

本文摘要包含18个算法题解: 最长数字串(双指针):遍历字符串用双指针找出最长连续数字子串 岛屿数量(BFS/DFS):使用Floodfill算法统计连通区域数量 拼三角(暴力枚举):对6个边长进行全排列检查三角形条件 最小公倍数(数学):通过遍历找到能同时整除两数的最小值 最长连续子序列(排序/哈希):排序后扫描或使用哈希表记录连续区间长度 每个解法都给出了核心思路和关键代码实现,涉及字符串处理、图遍历、组合数学、数论等算法知识。

2026-04-21 09:44:51 502 11

原创 【Linux系统】深入线程:多线程的互斥与同步原理,封装实现两种生产者消费者模型

本文深入探讨了线程互斥与同步的核心概念。首先解释了临界资源、临界区、互斥和原子性等基本概念,通过count++的例子展示了非原子操作可能导致的数据竞争问题。接着详细介绍了线程互斥的实现机制,包括锁(mutex)的原理和使用方法,强调加锁解锁必须保证原子性,并提供了锁的封装实现。最后引入线程同步的概念,指出单纯互斥可能导致线程饥饿问题,提出需要配合条件变量来实现合理的线程调度顺序。文章通过代码示例和图示,系统性地讲解了多线程编程中保证数据安全的互斥与同步技术。

2026-04-17 16:40:35 1956 69

原创 【算法札记】练习 | Week1

本文摘要整理了8道编程题解,涵盖多种算法题型: 数字统计(数学模拟):遍历区间数字统计2的出现次数 数组交集(哈希):利用哈希表快速查找共同元素 点击消除(栈):用栈结构模拟相邻字符消除过程 快递费用(模拟):按重量分段计算运费 爬楼梯(动态规划):线性DP求解最小花费路径 字符串距离(贪心):记录最近位置计算最小间隔 简写单词(模拟):提取单词首字母并大写 滑动窗口:求满足条件的最小区间 题型包括基础模拟、数据结构应用和典型算法实现,适合编程练习和算法入门学习。

2026-04-12 21:11:49 517 12

原创 【Linux系统】入门线程:线程介绍与线程控制

本文摘要: 线程是进程内部的执行流,Linux中实际为轻量级进程,通过pthread库实现线程管理。线程共享进程资源(地址空间、文件描述符等),但拥有独立栈帧、局部存储等特性。相比进程,线程创建和切换开销更小,但缺乏保护机制。文章详细介绍了线程控制相关API,包括创建(pthread_create)、终止(pthread_exit)、等待(pthread_join)和分离(pthread_detach)等操作。特别指出线程ID本质是地址空间中的内存地址,并解释了线程局部存储机制。

2026-04-01 10:31:53 1597 100

原创 【Linux系统】中断机制、用户态与内核态、虚拟地址与页表的本质

本文深入探讨了操作系统中的中断机制和内存管理。中断分为外部硬件中断(如键盘输入)和内部软中断(如系统调用),是CPU响应异步事件的核心机制。文章通过形象比喻解释中断原理,并分析了用户态与内核态的转换过程。在内存管理部分,重点阐述了虚拟地址与多级页表的工作原理,包括页框分配、页表项结构以及地址转换过程。最后指出页表作为进程资源访问窗口的本质,以及多级页表在减少连续存储需求与降低查询效率之间的权衡。全文系统性地揭示了操作系统底层的关键运行机制。

2026-03-25 13:00:26 1489 85

原创 【Linux系统】信号机制拆解,透过内核三张表深入本质

信号机制概述 信号是操作系统提供的一种异步事件通知机制,用于进程间通信或响应硬件异常。本文从信号概念、处理方式、产生途径和保存机制四个方面详细介绍了Linux信号系统。 信号概念 信号与信号量无关,是进程间异步事件通知机制。通过kill -l可查看所有信号类型,其中1-31为普通信号,34-64为实时信号。 信号处理 进程处理信号有三种方式: 默认动作(通常终止进程) 忽略信号 自定义动作 通过signal()函数可修改信号处理方式,但9号和19号信号(强制终止/暂停)无法被自定义。 信号产生 五种产生方式

2026-03-19 15:48:56 757 77

原创 【Linux系统】搞懂System V IPC三大机制:共享内存(附基于共享内存的客户端服务端通信模型),消息队列,信号量

System V共享内存是UNIX系统中高效的进程间通信(IPC)方式,通过将同一块物理内存映射到不同进程的虚拟地址空间实现快速数据交换。其使用步骤包括:1)通过shmget创建共享内存块,需指定唯一key和大小;2)使用shmat将共享内存挂接到进程地址空间;3)直接读写内存实现通信;4)用shmdt解除关联;5)通过shmctl释放资源。共享内存的优点是速度快、无需系统调用,缺点是缺乏同步机制。典型应用场景如服务端-客户端通信模型,通过共享内存实现高效数据传输。

2026-03-08 09:50:28 612 75

原创 【Linux系统】理解管道通信,匿名管道实现进程池+命名管道实现服务端客户端通信模型(附源码)

本文介绍了进程间通信(IPC)的基本概念与管道实现方式。进程间通信包括数据传输、资源共享等功能,主要通过管道、System V IPC和POSIX IPC实现。管道分为匿名管道和命名管道:匿名管道用于亲缘进程间单向通信,通过pipe系统调用创建,具有单向性、字节流传输等特点;命名管道通过mkfifo创建,允许无关进程间通信。文章还演示了匿名管道的C语言实现代码,并提供了一个进程池的C++实现示例,展示了如何利用管道进行多进程任务分配。最后强调了管道通信自带同步机制的特点,以及读写端关闭时的不同处理方式。

2026-03-05 08:14:26 1076 79

原创 【Linux系统】磁盘ext文件系统与软硬链接

本文详细介绍了磁盘物理结构和ext文件系统的工作原理。磁盘由盘片、磁头、磁道、扇区和柱面组成,数据以4KB块为单位存储。ext文件系统将分区划分为块组,包含超级块、块组描述符表、位图、inode表和数据块区域。文件属性存储在inode中,内容通过块号索引查找,采用多级间接块索引支持大文件。目录实质是文件名与inode号的映射文件,通过挂载实现分区访问。文章还解析了硬链接(共享inode)和软链接(路径引用)的区别及用途,硬链接维护目录结构,软链接类似快捷方式。整个系统通过inode和路径解析实现高效文

2026-02-18 15:46:08 1132 66

原创 【C++】深入浅出“图”——最短路径算法

本文介绍了三种图的最短路径算法

2026-02-13 19:48:30 1561 55

原创 【Linux系统】从零实现一个简易的shell!

本文介绍了一个简单的Shell命令行解释器的实现框架。主要内容包括:1) 配置环境变量表;2) 打印命令行提示信息,显示用户名、主机名和当前路径;3) 获取用户输入的命令字符串;4) 分析重定向情况;5) 解析命令字符串并记录到参数表。该Shell实现了基本的命令行交互功能,包括环境变量加载、命令解析和执行准备等核心模块,为后续命令执行提供了基础框架。

2026-02-05 13:58:31 1163 19

原创 【Linux系统】文件IO:理解文件描述符、重定向、缓冲区

本文主要介绍了C语言文件IO操作与Linux系统调用的关系。首先回顾了C语言中的文件操作函数如fopen、fwrite等,指出这些库函数本质上是封装了Linux系统调用。然后详细讲解了Linux中的文件IO系统调用open、write、close等函数的使用方法,并通过代码示例演示了如何用系统调用实现文件读写。 文章重点剖析了文件描述符(fd)的本质,指出fd是内核文件描述符数组的下标,默认情况下0(stdin)、1(stdout)、2(stderr)分别对应键盘和显示器。通过实验展示了文件描述符的分配规则

2026-02-03 18:10:52 1163 67

原创 【C++】深入浅出“图”——图的遍历与最小生成树算法

本文介绍了图的两种遍历方法:广度优先搜索(BFS)和深度优先搜索(DFS)。BFS采用队列结构,从起始顶点出发逐层访问邻接顶点;DFS采用递归方式,沿着一条路径尽可能深入探索再回溯。两种方法都使用标记数组避免重复访问。文章提供了基于邻接矩阵的C++实现代码,并展示了测试用例。同时指出非连通图可能需要额外处理才能遍历所有顶点。

2025-12-21 23:58:36 1057 30

原创 【C++】深入浅出“图”——图的基本概念与存储结构

本文介绍了图的基本概念和两种存储结构。图由顶点集合V和边集合E组成,分为有向图和无向图。关键概念包括顶点的度、路径、权值、连通性等。图的存储结构主要有邻接矩阵和邻接表两种方式:邻接矩阵用二维数组表示顶点关系,适合稠密图;邻接表采用链表数组结构,适合稀疏图。文中给出了两种存储结构的C++实现代码,并分析了它们各自适用的场景和优缺点。邻接矩阵能快速判断顶点关系但空间占用大,邻接表节省空间但查询效率较低。

2025-12-21 21:57:52 1276 14

原创 【C++】一文带你看懂常见排序算法

本文介绍了常见的几种排序算法及其实现方法。主要包括插入排序(直接插入排序、希尔排序)、选择排序(直接选择排序、堆排序)和交换排序(冒泡排序)。每种算法都给出了基本思想、代码实现(C++)、测试结果及复杂度分析。其中希尔排序是直接插入排序的优化版本,堆排序利用了优先队列或make_heap算法实现。文章还提供了作者的博客链接,欢迎读者交流学习。这些排序算法在实际应用中各有特点,可根据具体需求选择合适的算法。

2025-12-21 11:45:45 1734 36

原创 【C++】并查集的原理与使用

本文介绍了并查集的概念、实现及其在算法题中的应用。并查集是一种用于处理不相交集合合并与查询的数据结构,通过数组表示森林关系。文章详细讲解了并查集的底层原理、核心操作(查找、合并、统计集合),并提供了C++实现代码。最后通过LeetCode例题(省份数量、等式方程可满足性)展示了并查集的实际应用,验证了其高效解决集合问题的能力。

2025-12-17 21:45:35 1225 38

原创 【C++】哈希扩展——位图和布隆过滤器的介绍与实现

本文介绍了两种高效处理海量数据查询的数据结构:位图和布隆过滤器。位图通过比特位直接映射整型数据,实现O(1)时间复杂度的查询,适用于整数判断场景。布隆过滤器则通过多个哈希函数将非整型数据映射到位图中,虽存在误判率但能大幅节省空间。文章详细分析了布隆过滤器的误判率数学推导,并给出了C++实现代码。两种数据结构各有优势:位图精确高效但仅支持整型,布隆过滤器支持更广数据类型但存在概率性误判。

2025-12-16 19:10:36 1772 75

原创 【Linux系统】进程终止、进程等待与进程替换的概念与实现

本文主要讲解了进程终止、进程等待和进程替换三个关键概念。首先介绍了进程退出的三种情况及其对应的退出码和终止信号,通过echo $?可以查看进程退出码。其次详细说明了进程等待的必要性及wait和waitpid系统调用的使用方法,重点解析了status参数如何通过位图记录进程退出信息。最后讲解了进程替换的实现方式,介绍了exec系列函数的功能及参数传递规则。全文通过代码示例验证了理论内容,帮助读者理解Linux进程管理的核心机制。

2025-12-10 21:43:59 1641 70

原创 【Linux系统】初探虚拟地址空间

本文主要探讨了内存空间布局和虚拟地址空间的概念。文章首先介绍了程序内存的栈区和堆区生长方向,并通过实验验证了栈区从高地址向低地址生长、堆区从低地址向高地址生长的特性。其次,通过fork示例引出虚拟地址的概念,解释了父子进程共享相同虚拟地址但不同物理地址的现象。文章详细阐述了虚拟地址空间与页表机制,包括写时拷贝的实现原理。最后,分析了虚拟地址空间的三大优势:保障安全性、实现内存高效管理、支持延迟分配和灵活内存布局。虚拟地址机制使程序在逻辑上有序访问内存,同时物理内存可无序存储,提高了系统安全性和资源利用率。

2025-12-04 18:40:25 654 6

原创 【Linux系统】探索命令行参数与环境变量的本质

本文介绍了C/C++中main函数的命令行参数和环境变量的相关知识。命令行参数通过argc和argv实现程序选项功能,环境变量则是系统级的全局参数,包括PATH、HOME等常用变量。文章详细讲解了环境变量的查看、修改方法,以及如何在程序中获取环境变量表(通过main的第三个参数、environ变量或getenv函数)。通过实例演示了命令行参数和环境变量的实际应用,帮助读者理解这些系统级参数的工作原理和使用方法。

2025-11-27 10:28:10 1063 12

原创 【Linux系统】解明进程优先级与切换调度O(1)算法

本文介绍了Linux进程优先级与调度机制。进程优先级由PRI和NI值决定,PRI=80+NI,NI取值范围为-20~19。通过top命令可修改进程nice值来调整优先级。Linux采用O(1)调度算法,使用两个优先级数组(活跃队列和过期队列)实现高效进程切换。活跃队列存放待执行进程,过期队列存放时间片耗尽的进程,通过指针交换实现队列轮转。这种设计结合位图查找和侵入式链表,确保调度时间复杂度为O(1)。文章还解释了竞争、独立、并行和并发等进程相关概念,说明多进程如何在单CPU环境下通过时间片轮转实现并发执行。

2025-11-23 19:05:26 1252 50

原创 【Linux系统】掌握进程状态:运行/阻塞/暂停/僵尸/孤儿......

本文详细介绍了Linux系统中的进程状态,包括运行状态(R)、睡眠状态(S)、深度睡眠状态(D)、暂停状态(T/t)、僵尸状态(Z)、死亡状态(X)以及挂起状态。文章解释了每种状态的含义和产生条件,并通过代码示例演示了如何查看和改变进程状态。重点说明了僵尸进程的危害及回收方法,以及孤儿进程如何处理。最后还介绍了内存不足时进程的挂起机制,分析了Swap分区的原理和作用。文章全面系统地讲解了Linux进程管理的核心概念和实际应用场景。

2025-11-20 16:12:40 763 43

原创 【Linux系统】初识OS的进程管理:查看与创建进程

本文介绍了计算机系统的核心概念:首先阐述冯·诺依曼体系结构中CPU、内存、外设的交互关系;然后说明操作系统作为软硬件资源管理者的核心功能;重点讲解了进程的概念,包括进程描述符PCB、查看进程的Linux命令(ps/grep)、父子进程关系(pid/ppid);最后通过fork系统调用示例演示了父子进程的创建与识别机制。全文从硬件架构到系统软件,最后聚焦进程管理,层层递进地揭示了计算机系统的基本工作原理。

2025-11-17 19:35:17 927 70

原创 【C++】现代C++的新特性constexpr,及其在C++14、C++17、C++20中的进化

本文概述了C++11到C++20标准中constexpr关键字的演进过程。从C++11引入constexpr开始,它被用于指定编译期可计算的常量表达式,能优化运行时性能。随着标准更新,constexpr功能不断增强:C++14放宽函数限制,允许局部变量和流程控制语句;C++17支持constexpr修饰lambda表达式;C++20则实现了编译期动态内存分配和虚函数支持等重大改进,使编译期计算能力显著提升。文章通过代码示例和汇编分析展示了各版本特性,体现了constexpr如何逐步模糊编译时与运行时的界限,

2025-11-07 16:11:47 2101 73

原创 【Linux系统】C/C++的调试器gdb/cgdb,从入门到精通

本文介绍了Linux下的程序调试方法,重点讲解了gdb/cgdb调试工具的使用。首先说明debug和release模式的区别,强调需添加-g选项生成可调试版本。文章详细演示了调试命令:启动调试(r)、断点设置(b)、查看变量(p)、单步执行(n/s)等核心功能,并对比了gdb和cgdb的界面差异。还介绍了条件断点设置、变量监视(display/watch)等高级调试技巧,通过示例展示如何设置条件断点(b 10 if i==5)和修改变量值(set var)。这些方法能有效帮助开发者定位和修复代码问题。

2025-11-03 20:27:01 1885 76

原创 【Linux系统】从零掌握make与Makefile:高效自动化构建项目的工具

本文介绍了make与Makefile的基础用法。make是Linux下的自动化构建工具,Makefile则用于定义项目构建规则。文章首先展示了一个简单的Makefile示例,说明如何通过依赖关系和依赖方法编译单个源文件。接着讲解了.PHONY伪目标的作用,它能让命令总是被执行而不受文件时间戳限制。最后介绍了Makefile的高级语法,包括变量定义、通配符匹配等功能,展示了如何利用这些特性高效管理包含大量源文件的项目。通过合理使用Makefile,可以显著提升项目构建效率,特别是在需要频繁修改和重新编译的项目

2025-10-24 21:08:22 1492 83

原创 【Linux系统】带你入门编辑器vim与编译器gcc

《Linux开发工具:vim与gcc基础使用指南》 摘要:本文介绍了Linux环境下两大核心开发工具——vim编辑器与gcc编译器的基本使用方法。vim部分详解了三种常用模式(命令/插入/底行)的切换与功能,包括光标移动、文本编辑、批量操作等实用技巧,并分享了vim配置优化方案。gcc部分则解析了C程序从预处理到链接的完整编译流程(-E/-S/-c选项),对比了动态链接与静态链接的差异,帮助读者掌握高效代码编辑与编译的核心技能。文章配有操作示例与截图,适合Linux初学者快速上手基础开发工具链。

2025-10-20 15:30:13 1842 71

原创 【Linux系统】了解文件权限:看懂rwx与用户管理

本文介绍了Linux系统中的用户分类与文件权限管理。主要内容包括:1)用户分为超级用户(root)和普通用户,通过su命令切换用户;2)文件权限通过rwx字符或八进制数值表示,区分所有者(u)、所属组(g)和其他用户(o)的权限;3)使用chmod修改权限,chown/chgrp修改文件所有者;4)umask控制新建文件的初始权限;5)粘滞位(+t)保护共享目录中的文件不被误删。文章通过具体指令示例,详细说明了Linux权限管理的核心概念和操作方法。

2025-10-10 17:41:17 1400 75

空空如也

空空如也

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

TA关注的人

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