自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】进程状态完全解析

本文全面解析Linux进程状态,从内核源码到用户态可见状态。内核通过task_struct->state字段定义进程状态,包括运行(R)、睡眠(S/D)、停止(T/t)、僵尸(Z)和死亡(X)等。用户态可通过ps命令查看8种抽象状态。重点分析了不可中断睡眠(D)和僵尸进程(Z)的形成机制及危害,并提供了解决方案。同时对比了孤儿进程与僵尸进程的区别,指出孤儿进程无害而僵尸进程需处理。最后通过状态转换全景图展示进程生命周期管理的关键路径,帮助开发者理解进程状态转换原理及系统问题排查方法。

2026-01-17 19:56:21 766

原创 【Linux】进程概念

本文摘要:进程是程序的执行实例,操作系统通过进程控制块(PCB)管理进程。Linux中的PCB是task_struct数据结构,包含进程状态、优先级、内存布局等关键信息。进程查看可通过/proc文件系统、ps命令或系统调用实现,每种方法各有优势:/proc提供详细信息,ps适合快速查询,系统调用则用于编程获取进程数据。理解进程概念及其管理机制是操作系统学习的基础。

2026-01-17 19:43:06 1081

原创 【Linux】git与gdb

本文介绍了版本控制工具Git和调试器GDB/CGDB的基本使用。Git作为分布式版本控制系统,可以记录文件修改历史、回滚版本、比较差异、支持并行开发和团队协作。文章详细说明了Git的安装方法、仓库创建流程以及上传代码的"三板斧"操作。在调试工具部分,重点讲解了GDB调试器的使用,包括-g编译选项的作用、GDB的基本命令以及更友好的CGDB安装方法。这些工具能有效帮助开发者管理代码版本和进行程序调试,提高开发效率。

2026-01-06 14:17:19 699

原创 【Linux】进度条

摘要 本文详细讲解了如何在终端实现进度条功能,涵盖核心原理和工程实践。关键点包括: 原理:通过回车符\r实现行内刷新,配合fflush强制输出缓冲 工程实现: 提供回调接口,由业务代码驱动进度更新 处理边界条件(除零、越界) 支持终端宽度自适应(ioctl获取窗口尺寸) 优化策略: 非终端环境降级输出 刷新频率控制(时间/进度阈值) 完整示例:包含基础演示版和可用于实际项目的增强版代码 适用于文件传输、安装过程等需要进度反馈的场景,代码可直接集成到C/C++项目中。

2026-01-04 20:19:24 292

原创 【Linux】自动化构建-make/makefile

本文介绍了Make和Makefile的核心概念与使用技巧。主要内容包括:1) Makefile工作原理,基于目标、依赖和配方的模型;2) 基本语法规则和变量定义;3) 自动变量、模式规则和通配符用法;4) 伪目标声明和多目标处理;5) 条件判断、函数调用等高级特性;6) 并行构建和调试技巧;7) 提供了一份实用的C工程Makefile模板。文章全面涵盖了从基础到进阶的Makefile编写要点,特别强调了依赖管理、变量展开和构建优化等关键概念。

2026-01-04 15:30:38 317

原创 【Linux】vim_gcc

本文介绍了vim编辑器和gcc编译器的基本使用。vim是一个多模式编辑器,包含命令模式、插入模式和底行模式,提供了丰富的文本编辑功能。文章详细讲解了vim的各种操作命令,包括光标移动、文本删除、复制粘贴、查找替换等。gcc编译器部分介绍了程序编译的四个步骤:预处理、编译、汇编和链接,并对比了动态链接与静态链接的优缺点。最后解释了动态库和静态库的概念,说明系统函数如printf的实现原理。

2025-12-02 20:35:09 648

原创 数据结构——单链表

本文探讨了顺序表存在的问题(插入删除O(N)复杂度、增容消耗、空间浪费)并提出链表作为解决方案。链表通过非连续的物理存储结构实现数据元素的线性逻辑顺序,每个节点包含数据和指向下一节点的指针。文章详细介绍了链表的概念、节点结构、实现方式(包括创建、打印、增删查等操作),并提供了完整的C语言代码实现。相比顺序表,链表在头部/中间插入删除时具有O(1)的时间复杂度,且避免了增容和空间浪费问题,是更灵活的动态数据结构选择。

2025-12-01 21:20:05 696

原创 数据结构——顺序表

摘要:本文介绍了线性表与顺序表的关系及实现原理。线性表是逻辑上的线性结构集合,包含顺序表、链表等实现方式。顺序表作为线性表的一种实现,底层采用数组存储,在物理结构上也是线性的。文章详细讲解了静态和动态顺序表的定义方式,并提供了动态顺序表的完整C语言实现代码,包括初始化、增删改查等核心操作。通过结构体封装数组,顺序表实现了对基础数组的功能扩展,为数据操作提供了更便捷的接口。

2025-11-30 17:21:04 249

原创 【Linux】进程控制

进程控制是操作系统中管理和调度进程的关键功能,涉及到进程的创建、终止、等待、程序替换以及进程间通信等多个方面,简而言之,进程控制确保操作系统能够有效地管理并协调不同程序的执行。对于我们而言,要对进程进行相关操作,就要深入理解操作系统对进程的控制机制,并熟悉Linux下进程控制的相关接口。如果子进程已经退出,调用 wait / waitpid 时,wait / waitpid 会立即返回,并且释放资源,获得子进程退出信息。

2025-07-16 11:21:32 1020

原创 【Linux】内建命令与外部命令

本文探讨了Linux系统中内建命令与外部命令的区别。内建命令是shell程序的组成部分,如cd、echo等,直接由shell解析执行,无需创建子进程,运行效率高;而外部命令如ls、vi等是独立程序,运行时需要调入内存并创建子进程。通过type命令可区分两者类型。总结指出,内建命令因无需创建新环境而更高效稳定,外部命令则因需要额外资源开销而使用成本较高。

2025-07-14 00:06:25 508 1

原创 C++入门基础

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

2025-01-18 07:17:29 758

原创 算法复杂度

数据结构()是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用,所以我们要学各式各样的数据结构。如:线性表、树、图、哈希等。

2024-11-05 13:22:43 890

原创 C语言数据类型和变量(1)

C语言提供了丰富的来描述生活中的各种数据。使用来描述整数,使用来描述字符,使用来描述小数。所谓“”就,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型才知道怎么操作数据。

2024-09-22 19:39:55 1166

原创 C语言常见概念

在VS上写代码,我们是需要创建项目,直接新建项目就可以了。再项目中就可以添加源文件和头文件。C语言把.c为后缀的文件称为源文件,把.h为后缀的文件称为头文件。intifreturn,这些符号被称为保留字或关键字。关键字都有特殊意义,是保留给C语言使用的程序员自己在创建标识符的时候是不能和关键字重复的关键字是不能自己创建的注:在C99标准中加入inlinerestrict_Bool_Complex_Imaginary等关键字。其他关键字开业自行了解,使用最多的还是上面的32个关键字。

2024-09-18 20:06:58 1554 5

原创 C语言基础题

,则表达式“a*b+d-c”值的类型为( D )。11.已知字符 'a' 的ASCII码为 97,执行语句printf ("%d, %c", 'b', 'b'+1 )",则执行"n=(int)f%3"后,n的值是( A )。13.若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是( D )。16.若a是基本整型变量,c是单精度实型变量,输入语句( D )是错误的。4.以下标识符中,不能作为合法的C用户定义标识符的是( B )。2.在C语言程序中,表达式5%(-2)的结果是( A )。

2023-12-29 14:58:23 1525

空空如也

空空如也

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

TA关注的人

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