Linux系统编程
文章平均质量分 96
Linux系统从入门到精通
..过云雨
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
19.【Linux系统编程】线程安全概述
本文摘要:文章系统阐述了线程安全与可重入的概念及区别,指出可重入函数必定线程安全但反之不一定成立。详细分析了死锁的四个必要条件及避免方法,讨论了STL容器和智能指针的线程安全性。最后介绍了悲观锁、乐观锁等常见锁机制,其中乐观锁通过版本号或CAS操作实现无锁并发。全文从理论到实践,全面解析了多线程编程中的关键问题,为开发者提供了重要参考。原创 2025-12-31 11:01:51 · 627 阅读 · 0 评论 -
18.【Linux系统编程】Linux线程池实现(从互斥、同步到日志+线程池完整代码实现带注释详解)
本文介绍了池化技术和日志系统的实现方法。池化技术通过预分配资源(如内存池、线程池)减少与操作系统的交互,提升系统效率。日志系统采用策略模式设计,支持将日志输出到控制台或文件,包含时间戳、日志等级等必要信息,并通过封装锁机制保证线程安全。日志实现部分展示了互斥锁封装和两种日志策略(控制台输出和文件输出)的具体代码实现。原创 2025-12-30 08:54:50 · 1654 阅读 · 0 评论 -
17-3.【Linux系统编程】POSIX 信号量核心用法拆解:零基础也能看懂的同步方案
POSIX信号量是内核级/用户级的同步原语,本质是一个受保护的非负整数计数器,通过PV操作实现资源的有序分配。分为二值信号量(类似互斥锁)和计数信号量(支持资源分块使用)。核心特性包括原子性、阻塞唤醒机制和跨场景支持(线程/进程同步)。环形队列是基于固定数组的循环数据结构,通过头尾指针和模运算实现空间复用,需解决空/满判定的二义性问题,常见方案包括引入计数变量或牺牲一个存储位置。这两种机制在多线程编程中常用于实现生产者-消费者模型等同步场景。原创 2025-12-30 08:50:27 · 629 阅读 · 0 评论 -
17-2.【Linux系统编程】线程同步详解 - 条件变量的理解及应用
本文探讨了线程同步的核心概念及其解决互斥锁带来的问题。通过自助取款机场景类比,说明基础互斥锁虽然保证资源安全但可能导致线程饥饿,而同步机制通过排队规则实现有序访问。文章详细介绍了条件变量的工作原理,包括等待-唤醒机制及其在快递柜存取件场景中的实际应用。最后通过代码示例演示了条件变量的具体使用方法,展示了如何让线程按顺序执行,从而解决互斥锁的不公平性问题,实现高效有序的线程协作。原创 2025-12-29 10:20:50 · 936 阅读 · 0 评论 -
17-1.【Linux系统编程】线程互斥详解 - 互斥量(锁)的理解及应用
本文讨论了多线程编程中的互斥问题及其解决方案。主要内容包括:1)进程/线程间互斥的基本概念,如共享资源、临界区和原子性;2)多线程并发操作的核心问题——竞态条件,通过售票系统示例展示了未加锁保护时共享变量操作导致的数据不一致问题;3)互斥锁的使用方法,包括初始化、加锁和解锁操作,强调锁的原子性保护作用。文章指出,互斥锁能将并发执行的临界区代码转为串行执行,有效解决竞态条件问题,确保线程安全。关键代码示例展示了未加锁时的错误情况和加锁后的正确实现方式。原创 2025-12-29 10:12:03 · 627 阅读 · 0 评论 -
16-2.【Linux系统编程】线程控制(POSIX线程库、线程创建、等待、终止、分离线程,多线程创建;线程ID及进程地址空间布局;线程的局部存储)
本文介绍了Linux线程的基本概念和实现方法。主要内容包括:1)通过pthread库创建线程,演示线程ID(tid)和轻量级进程ID(LWP)的区别;2)线程共享进程资源的特点,包括全局变量和函数;3)线程调度机制和崩溃影响;4)C++11线程库在Linux下的pthread封装实现。代码示例展示了线程创建、运行和回收(pthread_join)的基本操作,并解释了线程ID的本质是pthread库维护的进程内唯一标识。原创 2025-12-22 15:17:44 · 1261 阅读 · 0 评论 -
16-1.【Linux系统编程】线程概念(线程优缺点、异常、用途;进程和线程之间的联系)
文章摘要 本文系统介绍了Linux线程的核心概念,从感性认知到理性分析层层深入。首先从教材定义出发,解释线程作为进程内部执行分支的特性,对比进程与线程的资源分配差异。重点分析了Linux线程的轻量级进程实现方式,以及不同操作系统对线程管理的差异。随后深入探讨了虚拟内存和分页机制的原理,包括物理内存管理中的页框划分、struct page结构体设计等底层实现细节。文章通过图解方式清晰展示了虚拟地址到物理地址的映射过程,以及页表在内存管理中的关键作用,为理解Linux线程机制提供了全面的理论基础。原创 2025-12-22 15:16:13 · 1299 阅读 · 0 评论 -
15-3.【Linux系统编程】进程信号 - 信号捕捉(信号捕捉流程、操作系统运行方式及流程、内核态和用户态、可重入函数、volatile防止优化)
本文介绍了Linux系统中进程信号的信号捕捉的流程和操作系统运行机制。信号处理不是立即执行,而是在进程从内核态返回用户态时进行检查处理。信号捕捉过程涉及用户态和内核态切换,当信号递达时会调用用户自定义处理函数。操作系统通过硬件中断和时钟中断驱动运行,时钟中断定期触发进程调度。操作系统本质上是一个基于中断的死循环,通过中断向量表响应各种事件。原创 2025-12-16 10:51:25 · 852 阅读 · 0 评论 -
15-2.【Linux系统编程】进程信号 - 信号保存(信号处理流程的三种状态:未决、阻塞、递达,信号保存由未决表完成、sigset_t信号集类型及相关函数)
本文介绍了Linux系统中进程信号的信号的三种状态及保存方。内核通过未决信号集(pending)为每个进程存储已产生但未处理的信号。信号处理流程包含三种状态:信号递达(Delivery)、信号未决(Pending)和信号阻塞(Block)。内核使用三张表管理信号:pending表记录未决信号,block表记录阻塞状态,handler表存储信号处理函数指针。信号集操作函数包括sigemptyset、sigfillset等,可以读取或修改信号屏蔽字(sigprocmask)和未决信号集(sigpending)。原创 2025-12-16 10:50:08 · 1110 阅读 · 0 评论 -
15-1.【Linux系统编程】进程信号 - 信号的产生(信号概念、自定义信号捕捉singal函数、前台/后台进程、系统调用kill发送信号)
本文介绍了Linux系统中进程信号的信号产生方式及流程。信号是进程间异步事件通知的一种方式,通过中断当前操作来实现。文章通过快递的类比解释了信号的产生、识别、处理时机和方式等核心概念。主要内容包括:1) 信号与信号量的区别;2) 信号的产生方式,特别是通过键盘发送信号(如Ctrl+C);3) 使用signal()函数自定义信号处理;4) 前台进程和后台进程的区别,以及它们对信号的不同响应方式。文章还提供了相关代码示例和命令操作说明,帮助理解信号处理的实际应用场景。原创 2025-12-16 10:48:14 · 1124 阅读 · 0 评论 -
14.【Linux系统编程】进程间通信详解(管道通信、System V共享内存、消息队列、信号量)
本文介绍了进程间通信(IPC)的基本概念和实现方式,重点讲解了匿名管道的原理和使用。主要内容包括:1) IPC的目的包括数据传输、资源共享、事件通知和进程控制;2) IPC的本质是让不同进程访问同一份内存资源;3) IPC主要分为管道、System V IPC和POSIX IPC三类;4) 详细阐述了匿名管道的创建、管理和访问机制,通过pipe系统调用创建读写文件描述符;5) 结合代码示例展示了父子进程通过管道通信的过程,子进程写入数据,父进程读取数据;6) 从文件描述符和内核角度分析了管道的实现原理。原创 2025-12-04 20:08:35 · 1787 阅读 · 0 评论 -
13.【Linux系统编程】从ELF格式深入理解动静态库
本文聚焦 ELF(Linux/Unix 统一二进制文件格式),解析其编译链接核心作用。通过实例说明编译生成 ELF 目标文件(.o),拆解 ELF 头、程序头表、节头表及各类节的核心结构,梳理 “节合并为可执行文件、加载时转段” 的完整流程。借助 readelf 工具,明确程序头表(指导加载)与节头表(静态链接分析)的功能差异,最后点明节转段的核心价值 —— 减少内存碎片,提升 4KB 页面使用效率。原创 2025-11-16 19:43:12 · 914 阅读 · 25 评论 -
12.【Linux系统编程】动静态库制作与使用
本文介绍了库的基本概念和两种类型(静态库和动态库)的生成与使用方法。静态库在编译时链接到可执行文件中,而动态库在程序运行时加载。文章详细说明了两种库的生成流程:静态库通过ar命令打包.o文件,动态库通过gcc命令生成位置无关码。同时介绍了三种不同路径下库的使用方法,包括指定头文件和库文件路径的方式。最后指出了动态库运行时搜索路径的问题及其解决方法。通过具体示例和Makefile脚本,完整展示了库的开发和使用流程。原创 2025-11-11 11:32:11 · 637 阅读 · 5 评论 -
11.【Linux系统编程】文件系统详解——从磁盘硬件到文件系统
本文介绍了磁盘的物理结构、文件系统及软硬件链接。主要内容包括:1. 磁盘的物理结构。2.ext2文件系统,从磁盘→分区→分组,并对分组内的各个成员进行详解。3.介绍了目录与文件的联系,路径解析和路径缓存,挂载分区等文件相关内容。4.对软硬件连接进行解释:软连接即快捷方式,硬链接即文件备份。原创 2025-10-31 20:43:22 · 1977 阅读 · 38 评论 -
10.【Linux系统编程】缓冲区详解——库缓冲区 VS 内核缓冲区
本文探讨了C语言中缓冲区的机制及其对I/O操作的影响。通过两个实验案例对比了使用close前后printf和write函数的输出差异,揭示了标准库缓冲区的工作机制。文章详细介绍了缓冲区的概念、引入原因、工作流程及三种刷新方式(全缓冲、行缓冲、无缓冲),并分析了库函数IO与系统调用IO的本质区别。关键发现:1)关闭文件描述符后,printf输出失效是因缓冲区未刷新;2)write始终有效因直接系统调用;3)通过fflush或使用无缓冲的stderr可强制刷新缓冲区。这些机制直接影响程序I/O效率与行为。原创 2025-10-12 20:29:46 · 1210 阅读 · 45 评论 -
09.【Linux系统编程】“文件”读写操作,Linux下一切皆文件!
本文系统介绍了文件操作的核心概念与实践方法。首先从狭义和广义两个角度定义文件,指出Linux下一切皆文件的理念,并强调文件操作本质是进程对文件属性和内容的操作。接着详细讲解了C语言文件接口的使用,包括文件创建路径定位、读写实现、标准输入输出流以及不同打开模式的区别。最后引入系统级文件I/O接口,重点解析open函数的标志位参数分类和使用方法。文章覆盖了从语言层到系统层的文件操作知识体系,为开发者提供了全面的文件操作指导。原创 2025-09-28 10:18:17 · 1383 阅读 · 26 评论 -
08.【Linux系统编程】面试官:自己实现过 Shell 吗?我当场把代码甩给他,第二天收到 Offer
本文介绍了一个简易shell的实现原理和流程。主要内容包括:1)shell的基本功能要求,包括处理普通命令和内建命令,理解相关概念和工作原理;2)实现原理分析,通过fork-exec-wait循环建立子进程执行命令;3)详细实现流程,从环境变量初始化、命令行提示符打印,到命令获取、解析和执行;4)关键代码实现,展示了环境变量获取、目录显示优化等核心功能。该shell模拟了bash的基本交互过程,帮助理解shell的工作原理。原创 2025-09-25 10:21:06 · 5586 阅读 · 37 评论 -
07.【Linux系统编程】进程控制(进程创建fork、进程终止exit等、进程等待wait&waitpid、进程替换execl等)
本文主要介绍了Linux进程控制的:进程创建、进程终止、进程等待和进程替换。在进程创建部分,详细讲解了fork函数的工作原理、写时拷贝技术以及fork的常见用法和失败原因。进程终止部分阐述了进程退出的三种场景,比较了return、exit和_exit三种退出方式的区别,并解释了退出码与错误码的区别。进程等待部分,强调了父进程回收子进程的必要性,以避免僵尸进程导致的内存泄漏问题。进程替换使用exec的几个函数实现,重点只替换代码和数据,PCB不变。清晰地展示了Linux进程管理的关键技术原理。原创 2025-09-23 19:09:22 · 1236 阅读 · 33 评论 -
06.【Linux系统编程】命令行参数(给main传参)、环境变量(概念+使用)、进程的虚拟地址空间(用户实际访问的空间)
本文主要介绍了Linux系统中的命令行参数、环境变量和进程虚拟地址空间三大核心概念。命令行参数通过main函数的argc和argv实现程序功能选项;环境变量PATH等帮助系统定位程序,具有全局属性,可通过export/unset管理。虚拟地址空间通过页表映射物理内存,实现内存保护和写时拷贝机制,其区域划分由mm_struct管理。三者共同构成了Linux进程运行的基础:命令行参数提供功能选项,环境变量支持系统配置,虚拟地址空间保障内存安全性和进程独立性。原创 2025-09-21 12:25:02 · 1750 阅读 · 47 评论 -
05.【Linux系统编程】进程(冯诺依曼体系结构、进程概念、进程状态(注意僵尸和孤儿)、进程优先级、进程切换和调度)
本文系统介绍了冯诺依曼体系结构和操作系统进程管理的核心概念。冯诺依曼体系结构包含五大部件(运算器、控制器、存储器、输入/输出设备),采用存储程序和顺序执行两大原则,实现了计算机的通用性,但存在外设速度制约CPU性能的木桶效应。操作系统通过进程管理实现软硬件资源调度,进程由PCB(进程控制块)和程序代码数据组成,具有多种状态(运行、就绪、阻塞等),重点解释了僵尸进程和孤儿进程的产生与危害。详细阐述了进程的优先级、进程切换(上下文切换机制)、进程调度问题。原创 2025-09-14 14:46:36 · 1181 阅读 · 27 评论 -
04.【Linux系统编程】基础开发工具2(makefile、进度条程序实现、版本控制器Git、调试器gdb/cgdb的使用)
本文介绍了Linux系统下的开发工具和调试技术,包括Make自动化构建工具、Git版本控制器以及gdb/cgdb调试器的使用。 在Makefile部分,详细讲解了其基本语法(依赖关系、依赖方法、伪目标)、执行流程和变量定义等核心概念,强调了Makefile对大型工程管理的重要性。Git部分介绍了"三板斧"操作(add/commit/push)和版本控制基础。调试技术方面,重点讲解了gdb/cgdb的常用命令(断点设置、单步执行、变量监控等)和调试技巧,并说明了debug模式的编译要求。原创 2025-09-13 19:15:09 · 858 阅读 · 11 评论 -
03.【Linux系统编程】基础开发工具1(yum软件安装、vim编辑器、编译器gcc/g++)
本文主要介绍了Linux系统下的开发工具链,包括软件包管理器、文本编辑器、编译器、构建工具、调试器等核心内容。在软件包管理方面,详细讲解了yum/apt的使用方法、软件生态和依赖关系;编辑器部分重点介绍了vim的三种模式及常用命令;编译环节阐述了gcc的编译流程和动静态链接原理。原创 2025-09-13 19:14:30 · 1151 阅读 · 5 评论 -
02.【Linux系统编程】Linux权限(root超级用户和普通用户、创建普通用户、sudo短暂提权、权限概念、权限修改、粘滞位)
本文主要介绍了Linux系统中的用户管理和权限机制。系统包含root超级用户(拥有所有权限)和普通用户(权限受限),通过adduser/passwd/su命令管理用户。权限系统由角色(拥有者、所属组、other)和目标属性(rwx权限位)组成,通过chmod修改权限属性(字符或八进制表示)。重点讲解了文件/目录权限差异、umask缺省权限设置、粘滞位(防止共享目录误删)以及chown/chgrp修改角色归属。root用户不受权限限制,普通用户只能修改自有文件权限,目录需要x权限才能进入。原创 2025-09-12 13:39:20 · 1327 阅读 · 18 评论 -
01.【Linux系统编程】Linux初识(Linux内核版本、基础指令、理论知识、shell命令及运行原理)
本文是Linux系统入门指南,主要分为四个部分:1)Linux初识介绍开源特性和内核版本;2)基础指令部分详细讲解28个常用命令,包括文件操作(ls、cd、mkdir等)、文本处理(cat、grep等)、压缩传输(zip、tar等)以及系统管理(shutdown、date等);3)理论知识重点阐述Linux"一切皆文件"的设计理念、目录结构、路径概念及重定向与管道操作;4)Shell运行原理,解释其作为用户与内核中介的角色。文档通过大量实例演示命令用法,是Linux初学者的实用操作手册。原创 2025-09-12 13:33:59 · 1627 阅读 · 21 评论 -
00.【Linux系统】 Linux初识(云服务器设置CentOS并使用、Xshell链接云服务器)
Linux初识(云服务器设置CentOS并使用、Xshell链接云服务器),华为云免费申请一个月的云服务器;下载Xshell,并通过Xshell连接华为云服务器进行操作。原创 2025-03-27 13:08:26 · 820 阅读 · 0 评论
分享