- 博客(39)
- 收藏
- 关注
原创 从ELF到进程间通信:剖析Linux程序的加载与交互机制
本文深入解析Linux程序的运行全流程,从ELF(可执行与可链接格式)文件的结构分析开始,详细讲解操作系统如何加载ELF程序到内存(包括程序头、段映射、动态链接等步骤)。随后探讨进程间通信(IPC)的核心机制,如管道、共享内存、消息队列和Socket,分析其底层实现与适用场景。通过结合代码示例和工具(如readelf、strace),帮助开发者理解程序从静态文件到动态执行的完整生命周期,并优化多进程协作效率。适合中高级开发者深入Linux系统编程。
2025-08-11 18:49:56
1428
26
原创 程序员必备技能:Linux 链接与库文件入门指南
本文针对程序员讲解Linux中链接与库文件的核心概念,涵盖静态链接与动态链接的区别、符号解析过程,以及如何创建和使用静态库(.a)与动态库(.so)。通过实际命令示例(如gcc编译选项、ldd依赖检查等),帮助读者掌握库文件的生成、链接及调试技巧,提升程序构建效率与兼容性。适合Linux开发初学者快速理解链接机制与库文件管理
2025-08-11 18:25:17
1425
14
原创 从物理扇区到路径访问:Linux文件抽象的全景解析
本文深入剖析Linux文件系统的层次化抽象设计,从磁盘物理扇区到用户可见文件的完整转换过程。通过分析块设备驱动、文件系统格式(如ext4),揭示inode、dentry等关键概念的协作机制,展现Linux如何通过统一抽象实现"一切皆文件"的设计哲学,为开发者提供文件系统运作机制的完整视角
2025-08-04 21:49:35
1711
22
原创 从exec到Shell:深度解析Linux进程等待,程序替换与自主Shell实现
本文深入解析Linux进程管理中exec系统调用、程序替换机制及进程等待的原理,通过分析进程创建、替换和回收的全流程,揭示Shell环境下的命令执行本质。文章将结合代码实例演示如何利用fork-exec-wait技术链实现简易Shell。
2025-08-04 20:51:42
1518
29
原创 从文件到文件描述符:理解程序与文件的交互本质
本文深入剖析Linux系统中文件描述符的核心机制,解析open/read/write等系统调用,重点探讨文件描述符表的组织方式、与VFS的交互过程。
2025-07-28 10:28:55
2088
27
原创 从fork到exit:剖析Linux进程的诞生、消亡机制
本文深入剖析Linux进程从创建到终止的全生命周期机制,重点解析fork()系统调用的底层实现、写时复制(COW)技术优化、进程地址空间构建,以及进程退出时的资源回收流程。通过分析进程描述符(task_struct)、调度器介入时机、僵尸进程的产生与处理,揭示Linux如何高效管理进程的诞生与消亡。文章还将探讨exit()与wait()的协同机制,以及信号处理、进程组与会话对终止行为的影响,为理解Linux进程管理提供系统性视角。
2025-07-28 10:10:38
1426
39
原创 从env到mm_struct:环境变量与虚拟内存的底层实现
本文深入解析Linux系统中环境变量与进程内存管理的底层机制,其存储结构由environ指针维护。内核通过mm_struct结构体管理进程虚拟地址空间,其中环境变量所在的栈区域受虚拟内存区域(VMA)保护,并采用写时复制(COW)机制优化内存使用。通过分析内核内存管理流程,揭示环境变量在进程初始化阶段的加载机制及其与虚拟内存系统的交互关系,为理解Linux进程启动和运行机制提供理论基础。
2025-07-21 10:31:20
1631
24
原创 Linux进程核心机制:状态、优先级与上下文切换详解
本文深入解析Linux进程管理的三大核心机制:进程状态、优先级调度与上下文切换。首先,详细阐述Linux进程的多种状态(如运行、睡眠、停止等)及其转换条件,揭示内核如何通过状态机模型管理进程生命周期。其次,剖析进程优先级机制,包括静态优先级(nice值)、动态优先级(实时策略),分析内核如何平衡效率与公平性。最后,深入探讨上下文切换的底层流程,帮助开发者理解进程调度的底层原理。
2025-07-21 10:18:34
1728
33
原创 硬件与软件的桥梁:冯诺依曼体系、操作系统和初始进程的深度解析
本文深入解析计算机系统中硬件与软件协同的核心机制,以冯诺依曼体系为起点,揭示其“存储程序”思想如何通过统一的二进制编码弥合硬件与软件的鸿沟。进一步探讨操作系统在其中的关键角色:作为资源管理者,它通过进程调度、内存分配等机制抽象硬件功能;作为服务提供者,它构建了系统调用等接口,使软件无需直接操作硬件。最后,以初始进程(如Linux的init)为例,阐述操作系统如何通过首个用户态进程激活软件生态,完成从硬件上电到多任务环境的跨越。全文通过这三层递进,展现计算机系统自底向上的逻辑连贯性,为理解软硬件交互提供体系化
2025-07-15 08:16:04
1763
46
原创 构建完整工具链:GCC/G++ + Makefile + Git 自动化开发流程
GCC/G++是GNU开源编译器套件,支持C/C++等语言的编译与优化,提供丰富的编译选项(如-O2、-Wall)以生成高效代码。Git作为分布式版本控制系统,用于管理代码变更、分支协作和历史追溯,核心命令包括clone、commit、push等。Makefile则通过定义目标、依赖和编译规则,结合make命令实现自动化构建,提升开发效率。三者结合形成完整的开发工具链:Git管理代码版本,Makefile组织编译流程,GCC/G++完成最终编译,共同支持高效、可维护的软件开发。
2025-07-14 08:57:20
1775
24
原创 从终端到 IDE:Linux 开发工具的全面指南
Linux 为开发者提供了强大而灵活的工具生态,从高效的命令行实用工具到现代集成开发环境(IDE),每一款工具都旨在提升生产力与代码质量。本文将探索经典的文本处理工具(如 grep、sed)、版本控制系统(如 Git)、调试利器(如 gdb),以及高效的代码编辑环境(如 Vim、VS Code),帮助开发者构建流畅、优雅的工作流程。无论是新手还是资深工程师,都能从中发现优化开发体验的实用技巧。
2025-07-09 14:04:00
1525
18
原创 指尖上的魔法:优雅高效的Linux命令手册
在键盘的轻触与终端的闪烁之间,Linux命令以简洁的字符编织出强大的力量。本文带你领略命令行的艺术——从基础的目录漫游到文本的优雅处理,从进程的精准操控到权限的微妙平衡。每一个命令都是通向系统深处的钥匙,每一次敲击都是与机器的高效对话。无论你是初探终端的新手,还是追求极致效率的行者,这里都有值得品味的技巧与智慧。
2025-07-07 21:46:39
1786
34
原创 数据结构之八大排序算法
各位铁子们好啊,博客已经好久没有更新了。今天就来看看新的文章吧。在日常生活中,我们能够发现在许多地方会存在排序的问题。比如学校排名,成绩排名,手机销量排名等等。而常见的排序有八种,我们一起来看看都有哪八种排序算法。
2025-02-10 12:14:41
1631
46
原创 初阶数据结构之队列的实现
QueueNode;//为了降低时间复杂度,增加一个尾指针,同时为了方便维护代码,对两个指针使用结构体进行封装}Queue;
2024-11-23 20:28:24
1878
51
原创 数据结构之带头双向循环链表
有了单链表的基础,要实现这个双向循环带头链表其实并不难。下面我们先来了解一下什么是双向循环带头链表。这就是双向循环带头链表的结构图,可以很清晰的看到,这个链表需要两个指针,一个指向后继结点,一个指向前驱节点,其次还需要一个头结点。只是这个头结点并不需要存储有效数据。//存储的数据类型//链表的定义//指向后继节点//指向前驱节点}LTNode;
2024-11-10 14:34:06
2829
78
原创 初阶数据结构之顺序表的实现
/动态顺序表//顺序表的容量int size;//实际存储数据的个数}SL;typedef int SLDataType 对int进行类型重命名,如果需要存储char类型数据,只需要修改这里的int就可以了。十分的方便,代码也不容易出现错误。
2024-10-25 19:03:27
1727
34
原创 C语言预处理详解
基本语法// 名字 内容100register//为register这个关键字创建一个简短的名字for;;//用更形象的符号来替换一种实现break;case//写case语句的时候自动把break加上//如果定义的stuff过长,可以分成几行写,除了最后一行外,每行的后面都加上一个反斜杠(\续行符)printf。
2024-10-19 15:36:06
740
56
原创 C文件操作
磁盘上的文件就是文件。程序文件数据文件(从文件功能的角度来分类的)。先来搞清楚内存和文件之间的关系。//从流得到字符//成功的话,返回读取到的字符,提升为整型值(ASCII码值)//失败的话或者遇到文件结束标志,发生读取错误,就返回EOFint main()//以写的方式打开文件exit(-1);//写文件ch
2024-10-04 20:28:21
1309
42
原创 C动态内存管理
/返回值类型是void*指针,参数类型是size_t,size是申请内存块的大小,单位是字节//size_t是一个unsigned int类型malloc函数向内存申请一块连续可用的空间,并返回指向这块内存空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针**。如果失败,则返回一个NULL指针,因此malloc函数的返回值一定要做检查。malloc函数的返回类型是void*类型的指针所以malloc函数并不知道开辟空间的类型,使用的时候由使用者自己来决定。
2024-10-02 19:20:19
1558
26
原创 数据在内存中的存储方式
比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。:已经好久没更新了,开学之后学习编程的时间少了很多。这道题暂且放下,等我们学习完浮点数的存储之后,再来解答这道题。IEEE754规定,在计算机内存中保存M时,首先我们通过几个例子来回顾一下整数在内存中的存储方式。浮点数的存储就说完了。IEEE754对于指数E和M还有一些特别的规定。在讲解操作符的时候,我们就已经学习过了。例如5.0的二进制是101.0,相当于。-5.0的二进制是-101.0,相当于。至于指数E则更加的复杂。
2024-09-16 16:47:56
824
14
原创 初识C语言函数
举例说明:输入一个整数,计算组成这个数的数字之和。例如:输入:1729输出:1919=1+7+2+9int DigitSum(int n)//函数的定义while (n)n /= 10;return sum;//函数的调用输出结果1729 19上述代码缺少了函数的声明,但是编译器并没有报出警告。这是因为函数定义在函数调用之前。现在,我们将函数定义放在函数调用之后,看看会不会有什么不同。//函数的声明放在函数调用之前,就可以消除警告。
2024-07-30 18:58:08
1362
7
原创 函数与数组
今天我们来了解一下C语言中的函数。先来做一个猜数字游戏吧。要想猜数字,就必须产生随机数,那么我们如何利用C语言来产生随机数呢?接下来就让我们来学习产生随机数的几个函数吧。
2024-07-25 11:59:41
1526
8
原创 初识C语言
先让我们通过一个简单的例子来理解一下什么是C语言。人与人之间可以通过中文交流信息,也可以通过英语交流,当然了也可以通过德语,法语,俄语,日语等等。这些语言叫做自然语言。那么问题来了,我们要如何与计算机进行交流呢?说到这里,就不得说到我们的C语言了。C语言就是我们与计算机进行交流的一门计算机语言。看到这里,相信已经有不少的小伙伴们已经理解什么是C语言了main函数是一个程序的入口,也叫做主函数。在一个项目当中,有且仅有一个main函数。无论一个项目中有多少行代码,总是从main函数开始执行。
2024-07-17 17:56:39
710
5
原创 博客入门篇(自我介绍)
大家好,我是来自西安一所高校计算机专业的学生,今年下半年就要进入大二了。但对于未来总是充满迷茫和焦虑,这使我常常患得患失,心情烦闷。为此我决定要改变这种现状。对于计算机专业的学生而言,首当其冲的就是编程语言了,在刚开始接触计算机时,就感知到了这是一个全新的领域,因为以前学到的知识好像都毫无用武之地。所以这对于我来说也是一个新的挑战。要想学好编程,除了听之外,更要懂得编程的思维以及动手编程的能力,当然了做好笔记也是重中之重。但是由于每学期的课程量不一样,所以学习编程的时间也会相应有所变化,但是我基本每天都会抽
2024-07-16 22:18:56
238
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人