
Linux
文章平均质量分 93
全面讲解Linux
DevKevin
个人网站:fengzhe.space
公众号:TechKevin
全栈领域新星创作者,腾讯云开发者社区创作之星,阿里云专家博主,华为云云享专家
展开
-
[操作系统] 进程间通信:命名管道原理与操作
创建命名管道实际应用示例示例 1:文件复制示例 2:服务器-客户端通信总结。原创 2025-03-27 12:24:51 · 519 阅读 · 41 评论 -
[操作系统] 进程间通信:进程池的实现
想象你开了一家餐馆,每次顾客点餐时都临时雇一个厨师显然效率低下。更好的方法是保持一组固定的厨师团队,随时待命处理订单。进程池的思路类似:它预先创建一组子进程(工作者),由父进程(管理者)分配任务给它们执行。这种方式减少了进程创建和销毁的开销,提高了任务处理的效率。使用**管道(pipe)**实现父子进程间的通信通过**轮询(round-robin)**方式分配任务,实现负载均衡支持动态注册和执行任务Channel类:管理单个子进程的通信通道ChannelManager类。原创 2025-03-24 19:38:46 · 1071 阅读 · 78 评论 -
[操作系统] 进程间通信:匿名管道原理与操作
进程间通信简介。原创 2025-03-18 20:32:27 · 1187 阅读 · 117 评论 -
[操作系统] ELF文件从形成到加载轮廓
symtab本质.symtab是源码中函数名、变量名和代码对应关系的“映射表”,记录程序的符号及其在目标文件或可执行文件中的位置和属性。原创 2025-03-07 19:58:03 · 1230 阅读 · 58 评论 -
[操作系统] 动静态库制作与原理
什么是库?原创 2025-03-06 19:32:40 · 565 阅读 · 2 评论 -
[操作系统] 文件的软链接和硬链接
硬链接是多个文件名指向同一个 inode 的映射关系。通过lntouch abcln abc def # 创建硬链接ls -li # 查看 inodeinode 相同abc和def的 inode 均为263466。链接数:inode 的硬链接数会递增(此处为 2)。软链接是一个独立的文件,其内容存储的是目标文件的路径。通过ln -sln -s abc abc.soft # 创建软链接ls -liinode 不同:软链接有自己的 inode(261678文件类型l表示链接文件原创 2025-03-02 22:02:20 · 1038 阅读 · 29 评论 -
雷龙CS贴片式NAND芯片应用实践-大容量存储与多媒体设备的完美融合
近期获赠雷龙科技(Longsto)推出的CS系列贴片式SD NAND存储解决方案,包含两片工业级贴片式NAND芯片(CSNP16GCR01-AOW)及全兼容转接板。该方案支持TF卡形态扩展,实现高可靠性嵌入式存储应用。实物展示:正面视图背面布局高性价比:免驱动即插即用,降低系统集成复杂度可定制性:提供STM32参考代码及固件开发支持可靠性保障:工业级温度适应性和抗静电保护开发便利性:标准协议栈支持快速移植。原创 2025-02-21 19:09:29 · 493 阅读 · 3 评论 -
[操作系统] Ext系列文件系统
详解Ext系列文件系统原创 2025-02-21 19:06:06 · 949 阅读 · 1 评论 -
[操作系统] 文件系统基础:磁盘的工作原理及组成
理解中,文件 = 内容 + 属性。被打开的文件加载到内存中,通过基础I/O操作(如)进行读写。操作系统通过文件描述符(File Descriptor)管理打开的文件。内存中的数据是临时状态,关闭文件后需保存回磁盘。未打开的文件持久化存储在磁盘上,以二进制形式保存。文件系统通过目录结构和索引机制记录文件的位置。所以磁盘上的存储需要文件系统进行管理维护。原创 2025-02-19 14:39:09 · 964 阅读 · 44 评论 -
[操作系统] 缓冲区的设计与实现
stdio.h理解缓冲区机制如同掌握Linux的"物流系统",通过本文的代码示例与原理剖析,开发者可更精准控制I/O行为。当遇到输出异常时,不妨思考:当前缓冲策略是什么?是否需要手动刷新?这才是真正掌握Linux核心机制的关键。原创 2025-02-17 16:17:24 · 692 阅读 · 18 评论 -
[操作系统] 基础IO:系统文件I/O
通过深入探讨文件描述符(fd)的使用,以及如何在 C 语言中实现文件的重定向功能,我们可以更好地理解 Linux 系统文件 I/O 的工作原理。掌握这些概念和技术,对于编写高效、可靠的系统级程序具有重要意义。原创 2025-02-16 12:19:46 · 1684 阅读 · 83 评论 -
[操作系统] 基础 IO:理解“文件”与 C 接口
本文从狭义与广义两方面深入探讨了 Linux 中的“文件”概念,阐释了文件操作的分类及系统底层实现——包括文件描述符、inode、缓冲机制等。随后,通过 hello.c 案例详细回顾了 C 语言文件接口的使用方法,从文件的打开、写入、读取,到如何利用各种标准流(stdin、stdout、stderr)输出信息,以及不同的文件打开模式。希望本文能为大家在 Linux 基础 IO 学习及 C 语言文件操作实践中提供清晰的指导和帮助。原创 2025-02-15 11:26:45 · 1049 阅读 · 10 评论 -
从零开始手写Shell:详解命令行解释器的实现原理
本实现仅需200行C++代码,却能完整展现Shell的核心工作机制。让我们通过解剖麻雀的方式,逐步拆解这个微型Shell的实现过程。原创 2025-02-12 19:23:08 · 806 阅读 · 2 评论 -
[操作系统] 进程程序替换
自定义环境变量最后一个参数是环境变量数组完全替换原环境变量不同的exec函数适用于不同场景参数传递和环境控制是关键区别正确进行错误处理至关重要结合fork使用是常见模式优先考虑execlp/execvp的便利性需要环境控制时使用execle/execve动态参数建议使用数组形式的execv系函数。原创 2025-02-11 12:14:32 · 664 阅读 · 91 评论 -
[操作系统] 进程等待
wait适用于简单场景,等待任意子进程结束。waitpid提供更精细的控制,支持非阻塞模式。WIFEXITED等宏可以解析子进程的退出状态。WNOHANG选项可以实现非阻塞等待,防止父进程卡死。原创 2025-02-11 12:13:16 · 1055 阅读 · 45 评论 -
[操作系统] 进程终止
进程终止是计算机程序运行的最终阶段,理解它的机制有助于更好地进行进程控制和调试。我们可以使用returnexit()_exit()进行正常终止,也可能因信号、非法操作等导致异常终止。此外,进程退出码是进程状态的反馈,在 Linux Shell 和 C 语言编程中都非常重要。原创 2025-02-05 17:14:19 · 897 阅读 · 13 评论 -
[操作系统] 进程地址空间管理
当一个应用程序数据过大的话,不会立即将所有的数据全部从硬盘上加载到物理内存中,会先加载一部分。但是在进程的虚拟地址空间中会将所有的数据对应的地址全部建立。于是当需要使用一个虚拟地址空间的时候会在页表中进行查找映射的物理地址,但是没有物理地址,还未加载进内存中。操作系统会动态加载数据,当需要的时候再申请物理空间,加载数据,然后建立映射关系。即使加载到物理内存的数据是乱序存储的,通过页表的映射关系也可以进行有序的管理。关于进程地址空间整体的管理结构如上图所示(虚拟区间较少情况下)。原创 2025-01-25 23:19:24 · 1128 阅读 · 3 评论 -
[操作系统] 深入进程地址空间
程序地址空间回顾程序地址空间回顾在C语言学习的时,对程序的函数、变量、代码等数据的存储有一个大致的轮廓。在语言层面上存储的地方叫做程序地址空间,不同类型的数据有着不同的存储地址。下图为程序地址空间的存储分布和和特性:staticstaticstatic。原创 2025-01-24 18:27:49 · 1444 阅读 · 91 评论 -
[操作系统] 环境变量详解
环境变量是Linux系统中一个不可或缺的机制,通过灵活运用环境变量,可以极大地提高系统的可用性和效率。了解环境变量的基本概念、设置方式以及在程序中的使用方法,对于开发和管理系统具有重要意义。以上就是关于环境变量的全部讲解。原创 2025-01-22 20:05:39 · 2141 阅读 · 68 评论 -
[操作系统] 进程的调度
CPU内有多个寄存器,每个寄存器作用都不同寄存器就是CPU内部的临时空间,存放正在运行的进程的临时数据寄存器不包含寄存器内的数据,寄存器只是临时空间!比如说当计算1 + 1时,两个1单独存放在不同的寄存器中,add存放在一个寄存器中,然后计算后再返回值。寄存器的内容又叫做进程的上下文数据,**TSS**就是任务状态段。进程切换最核心的就是,保存和回复当前进程的硬件的上下文的数据,即CPU内寄存器的内容!当前进程(例如进程A)运行并占用CPU资源,运行时其相关的上下文保存在寄存器和内存中。原创 2025-01-20 21:54:32 · 1063 阅读 · 5 评论 -
[操作系统] 进程的优先级
Linux 中的进程优先级和 nice 值是系统调度和资源管理的核心组成部分。通过合理设置进程的优先级和 nice 值,可以有效提高系统性能,确保重要任务优先执行,而不重要的任务则被适当延迟。希望通过本文的介绍,您对 Linux 中进程优先级的概念和操作有了更深入的了解。如果有任何问题或建议,欢迎在评论区留言讨论!原创 2025-01-21 10:15:00 · 688 阅读 · 9 评论 -
[操作系统] 进程状态详解
对进程的状态进行详细的讲解。原创 2025-01-20 21:50:37 · 1211 阅读 · 0 评论 -
[操作系统] 进程的概念与基础操作详解
前文所提:应用程序从磁盘加载进内存,而操作系统的管理方法是描述 + 组织,所以通过该种管理方法形成的管理对象就是进程。从用户的视角来看,进程是一个程序的运行实例;从操作系统的视角来看,进程是一个拥有资源分配能力的实体。进程 = 内核数据结构对象 + 自己的代码和数据在Linux中进程可以看做是和自己的代码和数据组成的。PCB中包含该进程的所有属性,与代码以及数据共同组成进程,PCB中存在指向其他进程的指针,通过指针的指向,进程通过双向链表的数据结构来进行链接,而进程的管理就是对链表的增删查改。原创 2025-01-17 21:13:43 · 1563 阅读 · 9 评论 -
[操作系统] 深入理解操作系统的概念及定位
概念概念任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。原创 2025-01-16 20:04:09 · 1741 阅读 · 48 评论 -
[操作系统] 深入理解约翰·冯·诺伊曼体系
冯诺依曼体系的核心思想是将存储器作为中央组件,所有数据的输入、输出、处理都围绕存储器进行。本质就是将数据进行拷贝,从一个节点拷贝到另一个节点然后进行处理,而拷贝的输入输出设备之间的拷贝效率会影响这个计算机的运行效率,所以说实际上计算机的性能就是各个节点之间的输入输出效率。而需要站在内存(存储器)的角度进行理解,下文会做出解答。冯诺依曼体系组成部分输入单元(输入设备):如键盘、鼠标、触摸屏等,将数据传入存储器。中央处理器(CPU):包括运算器和控制器,用于从内存中读取数据和指令并执行。原创 2025-01-15 22:18:02 · 1277 阅读 · 41 评论 -
[Linux] GDB 和 CGDB的使用及理解
在软件开发中,Debug是指通过各种手段和工具,定位和修复程序中的问题。发现错误:找出程序运行中产生的问题,例如变量值不对、程序崩溃等。了解程序行为:通过分析程序运行时的状态,理解程序的实际行为是否符合预期。提高程序健壮性:通过发现和修复问题,确保程序能在各种情况下正常工作。Linux系统中的调试工具以GDB(GNUDebugger)为代表,它提供了对程序运行的全面控制,可以帮助开发者快速定位问题。CGDB则是GDB的增强版,带有代码高亮和更直观的界面,进一步提升了调试效率。原创 2025-01-14 18:49:35 · 833 阅读 · 15 评论 -
[Git] 深入理解 Git 的客户端与服务器角色
为了更好地理解这一特性,我们通过一个实际的GitHub远程仓库和本地仓库的场景来详细说明Git如何在客户端和服务器之间协作,如何独立地进行版本管理,以及它是如何通过。GitHub是一个基于Git的远程托管服务,提供了代码协作的中心化远程仓库(裸仓库)。接下来,我们通过一个具体的例子展示GitHub远程仓库和本地仓库之间的交互过程,涵盖初始化、版本管理和同步等操作。如果当前本地仓库与Github仓库同步,则需先拉取Github仓库,然后再进行推送。等待本地仓库的交互。原创 2025-01-14 18:48:29 · 1490 阅读 · 2 评论 -
[Git] 如何理解及基础操作
Git 是一种版本控制器,能够帮助你记录文件的历史和变化过程,并支持多人协同作业。这样的方式带来了突出的问题:你还记得每个版本修改了什么吗?Git 为解决这些问题而生,它能够对各类文件进行维护,特别是对开发者而言,能够管理源代码。原创 2025-01-13 14:05:10 · 889 阅读 · 7 评论 -
[Linux工具] Makefile
Linux的make程序用来自动化编译大型源码,很多时候,我们在Linux下编译安装软件,只需要敲一个make就可以全自动完成,非常方便。make能自动化完成这些工作,是因为项目提供了一个Makefile文件,它负责告诉make,应该如何编译和链接程序。Makefile相当于Java项目的pom.xml,Node工程的package.json,Rust项目的Cargo.toml,不同之处在于,make虽然最初是针对C语言开发,但它实际上并不限定C语言,而是可以应用到任意项目,甚至不是编程语言。原创 2025-01-02 14:58:19 · 1810 阅读 · 94 评论 -
库的概念:动态库与静态库
库是一组封装好的函数或方法,它们可以被多个程序复用,从而避免重复编写相同功能的代码。例如,标准的数学函数库、字符串操作库都属于常用的库。根据链接方式的不同,库可以分为静态库和动态库。动态库和静态库各有优缺点,选择使用哪种库需要根据具体的项目需求来权衡。动态库:节省磁盘和内存资源,便于更新,但运行时依赖性较强。静态库:程序运行时独立性强,适合资源受限的环境,但程序体积较大。无论是动态库还是静态库,它们的核心本质都是目标文件的集合,通过不同的链接方式为程序提供功能支持。原创 2025-01-02 14:55:24 · 1118 阅读 · 52 评论 -
为什么C / C++编译要要先完成汇编?
C/C++ 编译先生成汇编语言是历史选择、技术优势和实践经验的共同结果。它顺应了早期计算机发展的历史,减少了编译器的复杂度,并且提高了编译的效率和灵活性。即使在现代,汇编语言仍然是编译过程中重要的中间桥梁,帮助开发者更好地理解和优化代码。因此,无论是学习编译原理还是深入理解 C/C++,了解为什么编译器保留汇编阶段对于掌握编译器的工作机制和高效编程都有重要意义。原创 2024-12-30 15:03:56 · 1154 阅读 · 27 评论 -
深入理解GCC 和 G++ 编译器
GCC 和 G++ 是 C 和 C++ 开发中不可或缺的工具,它们提供了从预处理到最终链接的完整编译支持。理解编译的每个阶段及其常用选项,可以帮助开发者更高效地开发、调试和优化程序。同时,动态链接和静态链接各有优劣,开发者需要根据项目需求合理选择。原创 2024-12-30 15:03:10 · 778 阅读 · 3 评论 -
在 Linux 中如何使用粘滞位 (t-bit)共享文件
在 Linux 系统中,共享文件是日常管理和协作中的常见任务,而粘滞位(Sticky Bit 或 t-bit)是实现共享目录安全性的重要工具之一。本文将带您详细了解如何在 Linux 中共享文件并配置粘滞位来保护共享资源的安全。原创 2024-12-28 15:07:40 · 1310 阅读 · 53 评论 -
深入理解 Linux 文件时间戳:atime、mtime 和 ctime 的概念及应用
时间戳是 Linux 文件系统中不可或缺的一部分,通过 atime、mtime 和 ctime,可以记录文件的访问、内容修改和元数据变化。这些信息在文件编译、备份同步、性能优化和系统审计等领域都具有重要价值。原创 2024-12-28 15:06:40 · 2534 阅读 · 72 评论 -
[Linux] Shell 命令及运行原理
Shell是 Linux 和 Unix 系统中的命令行解释器,调用用户输入的命令来与操作系统核心进行交互。进入 Shell 就像进入一个为您开放的环境,你可以在这里输入指令。Shell 能夠识别命令,解释为可执行的代码,然后通过系统调用为你进行实现。输入解析查找命令fork 和 exec执行命令结果显示深入了解这个流程,可以在命令行上可以更好地调试和解决问题。原创 2024-12-24 12:58:29 · 906 阅读 · 50 评论 -
从 x86 到 ARM64:CPU 架构的进化与未来
CPU 架构的发展,既是科技创新的历史,也映射出我们日常生活中对计算需求的不断变化。原创 2024-12-24 12:52:24 · 7703 阅读 · 61 评论