- 博客(77)
- 收藏
- 关注
原创 从零认识命名管道:命名管道全解析
本文介绍了命名管道(FIFO)实现进程间通信的原理和方法。命名管道通过文件系统中的特殊文件实现无关进程间的通信,具有路径唯一性,操作系统保证其FIFO行为。文章提供了两种创建方式:指令集(mkfifo命令)和系统调用(mkfifo()函数),并通过面向过程和面向对象的代码示例演示了通信实现。实验结果表明:(1)读端会在写端打开前阻塞;(2)双方打开后即可正常通信;(3)成功实现非亲缘进程通信;(4)写端退出后读端会收到EOF信号并自动退出。命名管道为进程间通信提供了一种简单可靠的解决方案。
2025-11-15 16:10:43
1075
原创 算法1111
要加endl,刷新一下缓冲区,不加过不了。用了ceil向上取整函数。没有必要真的定义一个字符数组,字符数组的是很珍贵的,数组的意义让你能重复遍历,但是,咱们完全可以一次遍历结束。注意“数组”不要越界。完。
2025-11-12 16:47:17
342
2
原创 算法1110
思路:关键是想到用hash表,hash的优势是能够快速查找对应的数值,并且这里可以用数组来模拟hash表。emmm自己写了一遍,有点恶心啊。最后提交不通过,应该是时间复杂度的问题。好方法:用可变长的数组来模拟栈结构。正确思路:类比括号匹配,用。修改之后:结果超时。
2025-11-10 13:54:33
431
原创 Linux 下 ELF 格式与程序加载机制:静态链接与动态库原理
ELF文件与动静态库加载看着一篇就够了,超详细,无论就业还是考研都能用到!速来看看!!
2025-11-09 16:26:46
1047
原创 操作系统拿着文件名查找磁盘文件的全过程
这篇文章将带你站在操作系统的角度,来看看操作系统是怎么拿着文件名来查找文件的。相信看完这篇文章之后你能彻底搞懂操作系统查找文件的底层原理。
2025-11-07 19:34:51
984
原创 自制简易 I/O 缓冲系统
本文实现了一个简易I/O缓冲系统(mystdio),包含用户缓冲区管理、不同刷新模式控制等功能。系统通过my_fopen/open打开文件,my_fwrite/memcpy写入缓冲区,支持行缓冲和全缓冲两种刷新方式。关键点在于使用fsync强制内核缓冲区同步到磁盘,解决write操作延迟写入的问题。通过实现my_fopen、my_fwrite、my_fflush和my_fclose等函数,完整模拟了标准I/O库的基本功能,深入理解了用户缓冲区、内核缓冲区和磁盘之间的数据流动机制。
2025-11-02 14:51:03
316
原创 操作系统缓冲区实验与“外国小子”翻车实录
在学习操作系统缓冲区时,我无意间让豆包小姐和外国小子都“翻车”了 😂为什么 printf() 输出不到文件?为什么 fork() 后多出几行输出?本文以实验 + 原理剖析 + 幽默讲解,彻底讲清楚 C 语言缓冲区与内核缓冲区的区别!一文理解:“一切皆拷贝”——计算机数据流动的本质。
2025-11-01 20:53:58
803
原创 系统文件I/O
本文介绍了Linux系统调用中的文件操作函数open、write和read的使用方法。open函数用于打开/创建文件,通过标志位(如O_RDONLY、O_CREAT等)控制打开方式,使用位图实现多标志组合。write函数实现二进制写入,可处理字符串和原始数据,但需要注意数据类型转换。read函数用于读取文件内容到缓冲区。文中通过示例代码展示了这些函数的具体应用,包括文件创建、权限设置、追加写入等内容,并解释了系统调用与语言层函数的关系。这些底层函数为文件操作提供了灵活高效的控制方式。
2025-10-31 19:44:38
353
原创 Linux文件操作
本文系统探讨了文件的概念与操作。从狭义上看,文件是磁盘上的永久性存储对象,本质是属性与内容的集合;广义上,Linux系统将一切设备抽象为文件(键盘、显示器等)。文件操作实际由进程通过系统调用完成,C语言库函数(如fopen/fwrite/fclose)封装了底层接口。重点解析了fopen模式(r/w/a)、fwrite参数(ptr/size/nmemb)和snprintf的缓冲区安全特性,并指出标准输入输出流(stdin/stdout/stderr)实质是文件指针。
2025-10-27 14:48:29
979
原创 Linux进程控制
全是干货、这么细致的进程控制详解,不火真的天理难容!!!想搞定 Linux 进程控制的朋友,快点开看看,绝对让你不虚此行!要是你啃 Linux 系统编程时,总在 “进程控制” 上栽跟头 —— 搞不清fork写时拷贝、分不清wait和waitpid、exec函数总写错,这篇文章就是救星!它从 “进程创建→终止→等待→程序替换” 拆解全流程,小到status位图解析,大到底层原理,还贴满代码示例,新手打基础、老手补漏洞都适配,看完直接打通进程管理任督二脉!
2025-10-26 17:38:34
792
原创 程序地址空间
本文通过代码实验验证了Linux进程地址空间的分布规律,包括代码段、全局数据段、堆、栈等区域的地址特征。研究发现虚拟地址空间通过页表映射物理内存,父子进程共享页表但通过写时拷贝保持独立性。内核使用mm_struct结构体管理进程地址空间,采用"先描述再组织"的方式实现虚拟内存管理。实验结果表明,操作系统通过虚拟地址空间让每个进程都认为自己独占内存,而实际物理内存通过页表机制统一管理,体现了操作系统的内存抽象能力。
2025-10-25 22:06:46
754
2
原创 Linux环境变量
环境变量是操作系统中用于定义运行环境参数的全局变量,支持系统功能实现。本文介绍了环境变量的基本概念、作用及使用方法:1)命令行参数通过argv数组实现不同功能选项;2)PATH环境变量指定系统查找命令的默认路径,可通过$PATH:路径追加自定义路径;3)系统通过bash维护命令行参数表和环境变量表,环境变量存储在配置文件中,登陆时动态加载;4)介绍了env、getenv等获取环境变量的方法,以及export/unset设置环境变量的操作。环境变量在程序执行、路径查找、系统配置等方面发挥关键作用。
2025-10-25 18:28:57
1023
原创 Linux下的进程切换
本文主要介绍了进程切换和Linux O(1)调度队列的实现机制。进程切换的核心是保存和恢复CPU寄存器中的硬件上下文数据,通过时间片轮转确保系统稳定性。Linux采用O(1)调度算法,使用双队列结构(活跃/过期队列)和优先级位图(bitmap)实现高效调度,优先级高的进程优先执行,时间片耗尽后转入过期队列。该设计通过位图快速定位最高优先级进程,避免了队列遍历带来的性能损耗,实现了高效的进程调度。
2025-10-22 17:34:01
1006
原创 进程的优先级
本文介绍了操作系统中进程优先级的概念及其管理机制。进程优先级决定了CPU资源的分配顺序,类似人类社会秩序,通过数字化的PRI和NI值实现动态调控。优先级存在的本质是解决资源稀缺问题,既要保障系统稳定性和用户体验,又要优化资源利用率。Linux系统中通过uid识别进程归属,使用PRI(默认80)和NI(范围-20到19)共同决定真实优先级。文章还区分了竞争性、独立性、并行和并发等核心概念,并演示了通过top命令调整进程优先级的实际操作。最后指出,不合理的优先级设置可能导致进程饥饿现象。
2025-10-22 16:33:37
1168
2
原创 Linux进程状态
本文介绍了操作系统中的进程状态及其在Linux内核中的具体表现。主要包括运行、阻塞、挂起三种基本状态,以及Linux特有的睡眠(S)、深度睡眠(D)、停止(T)、僵尸(Z)和死亡(X)状态。文章还解释了内核链表的数据结构设计,说明了进程控制块(PCB)如何通过链表管理。最后讨论了孤儿进程问题及其解决方案。通过状态转换分析和实例演示,帮助理解操作系统对进程生命周期的管理和资源调度机制。
2025-10-21 16:15:51
1070
原创 Linux初识进程
本文介绍了进程的基本概念和管理机制,主要包括:1) 进程是程序的执行实例,由内核数据结构和程序代码组成;2) Linux系统通过task_struct结构体(PCB)描述进程,包含标识符、状态、优先级等关键信息;3) 查看进程的两种方式:ps命令和/proc目录;4) 系统调用如getpid()获取进程信息;5) fork()创建子进程的特性,包括返回值差异、写时拷贝机制等。文章重点解析了Linux进程管理的关键技术,为理解操作系统进程机制提供了基础。
2025-10-21 13:30:54
772
原创 调试器-gdb/cgdb使⽤
本文介绍了Linux系统下的命令行调试工具gdb和cgdb的基本使用方法。主要内容包括:gdb的功能特点、debug/release模式的区别、常用调试命令(如断点设置、变量查看、程序控制等)以及分屏操作等。文章提供了详细的命令表格和示例,并推荐使用cgdb替代原生gdb。最后指出虽然这些工具使用不便,但作为开发者仍需掌握基础调试技能。
2025-10-20 16:14:44
502
原创 版本控制器Git
本文介绍了Git版本控制系统的基本使用。主要内容包括:Git的安装(通过yum命令)、仓库创建与克隆(git clone)、核心操作"三板斧"(git add、git commit、git push)。还补充了查看日志(git log)、配置.gitignore文件排除特定文件类型、以及同步远程代码(git pull)等实用技巧。Git作为一个分布式版本控制系统,能有效管理各类文件版本,特别适合团队协作开发时管理源代码。
2025-10-17 15:27:22
333
原创 ⾃动化构建-make/Makefile
本文介绍了Make命令和Makefile文件的核心概念与实现方法。主要内容包括:1. Make命令根据依赖关系和依赖方法形成目标文件;2. Makefile包含依赖关系列表和依赖方法;3. .PHONY修饰伪目标使其总是执行;4. 通过时间对比决定是否重新编译;5. 详细解析了Makefile文件的推导关系和执行过程;6. 介绍了通用版Makefile的实现,包括变量定义、通配符使用、自动推导规则等技巧。文章通过图示和示例代码,系统性地讲解了Make工具的工作原理和使用方法。
2025-10-14 17:53:56
194
原创 Linux下的编译器gcc/g++
本文介绍了程序编译的四个步骤:预处理、编译、汇编和链接,并解释了各步骤的作用及相应命令。同时还讲解了条件编译的应用场景、从C语言到二进制程序的转换逻辑,以及编译器的发展历史(自举原理)。最后对比了动态库和静态库的命名特点及链接方式,指出gcc默认使用动态链接,可通过-static选项切换为静态链接。全文系统性地阐述了程序编译的核心概念和关键过程。
2025-10-14 16:36:15
253
原创 Linux编辑器vim
Vim是一款专注且多模式的文本编辑器,主要包含命令模式、插入模式和底行模式三种核心模式。命令模式控制光标移动、文本删除复制等操作;插入模式用于文字输入;底行模式支持文件保存、搜索替换等功能。文章详细介绍了各模式下的快捷键操作,如gg跳转行首、yy复制、p粘贴等命令模式技巧,以及wq保存退出、set nu显示行号等底行指令。同时还提供了vim配置方法,推荐使用现成的一键化配置方案。全文系统梳理了vim的使用技巧,适合初学者快速掌握这款高效编辑器。
2025-10-14 14:37:53
1055
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅