- 博客(47)
- 收藏
- 关注
原创 从内核到应用层:Linux缓冲机制与语言缓冲区的协同解析
上篇我们介绍了,文件的重定向操作以及文件描述符的概念,今天我们再来学习一个和文件相关的知识-----------用户缓冲区。在操作系统中,缓冲区是实现高效资源管理的关键进制,缓冲区可以帮助用户、系统暂存读取及写入数据,规避了用户频繁的I/O操作,可以很好的提高系统的性能和用户的体验。
2025-04-03 09:30:00
112
4
原创 Linux文件描述符的分配机制与重定向实现:揭开“一切皆文件”的面纱
上篇我们介绍了语言和系统层次的基础I/O文件操作,其涉及的知识有:C语言文件操作和系统调用接口两者的关系、文件描述符的概念、操作系统对文件的管理等。本篇我们将承接上一篇文章以继续深入探讨Linux中文件操作。
2025-03-31 21:25:36
1893
31
原创 【Linux系统】shell的模拟实现
在前段时间的学习中,我从Linux基础指令开始分享,一直到上篇的Linux进程程序替换,Linux进程的相关知识算是基本学完了,今天我们就尝试将前面所学的知识整合起来,编写一个我们自己的shell命令行。大家已经学到这里了,相信对已经有一定的认识了,这里就不作赘述了。在本篇我们将使用我们前面所学知识,来模拟bash的基本功能,下面我们将按照:解析命令行、接受指令信息------>解析命令信息----->执行基本命令----->执行内建命令。这样的方式对bash一步步来完善它的功能。我们所实现的shell。
2025-03-30 10:31:37
1358
12
原创 【Linux基础IO】Linux文件操作:系统调用与库函数
在计算机体系中,文件操作是不可或缺的一部分,随着我们不断的深入学习,我们对文件使用的需求会越来越高,在操作系统层面,文件的操作往往是通过系统调用接口来完成的,要想更深入的学习,我们必须熟练掌握文件操作。本篇我们会以:C语言中的文件I/O操作------>系统调用接口-------->C语言文件操作和系统调用接口的关系-------->文件描述符及进程与文件的关系,来给大家展开介绍。
2025-03-26 12:52:42
1504
42
原创 Linux进程替身术:深入解析进程程序替换机制
进程程需替换是进程管理中一个重要的机制,它是通过exec系列的函数实现的,它允许一个进程进行程序替换后,替换为另一个新进程,下面我们会通过示例详细分析它的使用及替换机制。进程程序替换通过exec系列函数实现,高效切换程序逻辑,广泛应用于命令行工具和动态服务。使用时需精准处理参数、环境变量及资源,确保稳定性和安全性。理解其机制对开发高效、可靠的多进程应用至关重要。
2025-03-24 09:00:00
1757
28
原创 【Linux系统】进程等待:告别僵尸进程深入理解Linux进程同步的核心密码
在Linux系统中,进程等待()是多进程编程中的核心机制,指父进程通过系统调用(如wait()、waitpid()等)主动等待子进程的结束,并回收其资源。进程等待是Linux多进程的基石,主要用来进行,资源等待、同步等待、I/O操作等待,进程等待是操作系统实现多进程并发执行和资源有效管理的重要手段,它使多个进程能够合理的共享资源,提高系统整体的性能和效率。
2025-03-21 15:30:49
1337
5
原创 【Linux系统】Linux进程终止的N种方式
进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束。在Linux下进程终止的方式有很多,接下来我会一一介绍。进程终止是我们在学习Linux系统部分比较重要的一节,本篇我们主要介绍了进程退出码的作用以及如何来获取使用它,这对我们高效的编程有很大的帮助。
2025-03-19 07:32:58
1822
37
原创 【Linux系统】进程地址空间详解
进程地址空间是操作系统为每个运行中的进程分配的一个虚拟内存视图,它是所能访问的所有内存地址的集合。这给抽象层使得每个进程看起来都像是占用了整个计算机的内存资源,而实际上这些需您地址会v欸操作系统映射到物理内存中。本篇我将介绍进程地址空间的概念及使用这种方法带来的好处。在学习这块之前,我们需要一些背景知识作为铺垫学完上面的我们就可以知道为什么说进程相互独立:进程的PCB结构体是独立的、进程地址空间是独立的、页表是独立的、对进程切换时只需要切换PCB结构体对象就可以了。
2025-03-17 09:53:22
1600
34
原创 【Linux系统】Linux环境变量:系统配置的隐形指挥官
环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息。理解环境变量对于系统管理、软件开发都很重要。
2025-03-14 11:47:02
710
2
原创 【Linux系统】进程优先级:进程间的权力游戏
进程优先级调度是是指操作系统,根据进程的优先级来分配CPU资源的一种调度算法。系统会为每个进程分配一个优先级,优先级高的进程会优先获取CPU资源,从而更好地决定进程执行顺序。这种机制极大程度上提高了,系统的运行效率。
2025-03-12 12:07:43
1563
45
原创 【Linux系统】进程状态:一个进程的轮回史
在前面几篇文章中,我们将进程的基本概念以及一些关于进程的简单系统调用接口给大家详细介绍了,在本篇文章中我们会涉及到,进程的状态以及优先级的概念,帮助大家进一步的理解操作系统和进程之间的羁绊。学习这块可以帮助我们更深入的理解,进程的概念,但是需要注意的是,对于理解进程状态,这些是远远不够的,需要结合信号相关的知识,深入理解。
2025-03-10 12:01:58
996
37
原创 【Linux系统】进程的影分身之术:fork系统调用与getpid的探秘
在上篇文章中我们介绍了Linux进程的概念及操作系统对进程的管理,并且了解了进程标识符,PID和PPID的基本概念,接下来这篇文章将帮助我们更进一步的理解操作系统进程管理和多进程的概念。
2025-03-08 09:55:24
1312
44
原创 【Linux系统】-----进程初相识:原理与概念全解析
经过前两篇文章的铺垫,我们对操作系统的管理方式已经有了比较完整的认识,今天我们将学习Linux比较重要的知识--------进程,学习进程可以帮助我们更好的理解操作系统对数据处理、软硬件资源的管理。
2025-03-06 06:07:19
1123
31
原创 操作系统:计算机架构里的幕后指挥官
在上篇博客中,我们介绍了冯诺依曼体系,,但是冯诺依曼体系结构出现的都是硬件设备,难道需要用户去操作、管理硬件设备吗?这显然是不现实的,所以在计算机的组成中,开发者给用户提供了一款软件——操作系统,来帮助用户管理软硬件资源,它具体是如何管理,又是怎么做到的呢,下面我们深入探讨一下。操作系统是计算机系统中最基本的软件, 对于设计者来说, 操作系统是资源的管理者, 对于普通终端用户来说是一个操作环境, 是执行各种操作的一个平台。主要功能是管理系统各个部件,给上层应用软件提供一个易于理解和编程的接口。在深入讲解之
2025-03-03 22:39:58
1118
36
原创 冯诺依曼体系结构
冯诺依曼体系结构由美籍匈牙利数学家冯·诺依曼于1945年提出,其核心思想是“存储程序和程序控制”。采用二进制、程序存储、顺序执行运算器、控制器、存储器、输入设备、输出设备,这套理论被称为冯·诺依曼体系结构,根据这一原理制造的计算机被称为冯·诺依曼体系结构计算机。
2025-03-01 12:28:48
2343
37
原创 【Linux】调试工具GDB的使用及案例讲解
GDB是Linux下一款强大的调试工具。GDB可以调试C、C++、Java等语言,对于在Linux下工作的程序员来说,GDB是必不可少的调试工具。本篇我将以c程序,进行调试和讲解当大家对指令比较熟悉时,gdb的使用还是比较简单的,以上是我个人,经常使用的命令,是对标VS下编译的调试功能来介绍的,如果这不能满足你的要求,可以搜一些更高级的用法。
2025-02-26 13:18:29
1423
31
原创 c++入门-------命名空间、缺省参数、函数重载
在学习C++之前,首先我们要知道—C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的。为后续类和对象学习打基础。
2025-02-23 22:14:19
1224
29
原创 【c/c++】内存对齐
首先我们要知道什么是内存对齐?答:内存对齐(MemoryAlignment)是计算机科学中的一个概念,指的是将数据存储在特定的内存地址上,以提高系统性能,是计算机存储数据的一种规则。内存对齐是由编译器、硬件、操作系统以及编程语言的特性共同实现的。编译器负责生成对齐的数据结构和代码,硬件提供对齐访问的性能优势,操作系统管理内存分配时考虑对齐要求,而编程语言提供控制对齐的工具和指令。这些共同作用确保程序在执行时具有高效的内存访问和最佳的性能。
2025-01-19 17:05:12
1057
9
原创 告别繁琐编译!make和makefile的便捷之道
上一篇博客给大家分享了在Linux下编译源代码的两个工具,gcc和g++的使用。每次编译源代码,都要输入一串很长的指令,这个过程显然是十分复杂,且容易出错的,尤其是在一些大型的项目中,源代码可能有多个,此时编译起来就会更费劲。为了解决上面的问题,今天就给大家分享一个,Linux环境下的项目自动化构建工具——make/makefile。这部分知识理解起来比较抽象,多次尝试才能深刻理解,makefile还有很多特殊符号没有介绍,大家感兴趣自行搜索。
2025-01-18 20:29:48
857
2
原创 零基础上手gcc/g++:Linux编译轻松学
首先我们来学习一下gcc、g++二者之间的关系gcc英文全称为:GUN C Compiler,是GCC中的c编译器g++英文全称为:GUN C++ Compiler,是GCC中的c++编译器。gcc和g++ 两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的语法规则来编译。所以一般编译c用gcc,编译c++用g++。
2025-01-16 19:59:00
1270
24
原创 vim编辑器
我们之前在学习C、C++等一些其他的编程语言的过程中,一定会使用一些编译软件,比如VSCode、VS2022等编译软件,这些软件都是在windows下的图形化编译软件,而Linux系统下不能直接使用这些软件,Linux下也有特定的编辑器和编译器,Vim(Vi IMproved)是 Linux 和 Unix 系统中最流行的文本编辑器之一。它是 Vi 编辑器的增强版,功能强大,灵活性高,广泛用于编写和编辑代码、文本文件等。本文将详细介绍 Vim 的基本概念、操作模式、常用命令。
2025-01-14 07:45:00
1743
7
原创 Linux用户管理:普通用户的创建、删除、查看
在我们学习和工作中,我们经常会有多个人使用一台服务器的需求,所以Linux下创建普通用户是我们必须要掌握的一项技能,在root用户下创建多个普通用户,这样我们就可以用这些普通用户去做不同的事情,所以学习如何创建并管理这些用户就显得尤为重要。这块知识总的来说比价简单,不同系统间可能又略微差别,大家可以多次尝试,一定可以熟练掌握。
2025-01-13 09:33:18
1374
22
原创 Linux权限管理(用户和权限之间的关系)
这时后我们就需要防止其他小组查看我们的代码,但又不能拒绝本组内的成员查看,然而文件拥有者又只能存在一个,所以这时我们就需要将小组成员都归为一个组,给这个小组的成员分配,他们需要的权限,而对于不属于这个小组的当然就归为其他人了。这时就造成了一个问题,当两个用户在同一路径下工作时,虽然我无法查看你的文件内容,但是我只要拥有这个共享目录的写权限,我就可以将你的文件删除。注:以上三种身份均都是相对于具体文件来说的,并不是绝对的。接下来的演示为了方便给大家展示,我们利用的是普通文件进行操作的,所以未使用到-R选项,
2025-01-12 13:37:09
1061
44
原创 Linux常用指令-----下
在上一篇博客中,我給大家介绍了cat指令(将文件信息全部显示在屏幕),但是在我们做一个项目时,往往文件内容比较多,这时再使用cat指令就不太合适了。
2024-12-14 13:56:40
1084
61
原创 Linux常用指令-----中
Linux常用指令上篇–链接接下来我们介绍的指令是承接上篇,继续讲解的,希望大家可以先去看上篇。以上指令都可以相互之间配合操作做,我只是将,一些常见场景给大家展现了出来,只有多练习才能熟练运用,大家自己多尝试一下。希望这篇文章对你有所帮助。
2024-12-14 12:36:02
1197
23
原创 二分查找(带图详解)
在这篇博客中,我会给大家分享二分查找及其扩展。这是链接->Leetcode二分查找我们先以常规二分查找来引入。循环结束条件:左指针处在右指针的右边时(left>right)细节问题:1、在有的情况下我们使用mid=(left+right)/2来对指针取中时,如果left与right相加数值较大时(int类型存不下)可能会发生数据截断,这时我们往往采用mid=(right-left)/2+right,来代替上面的方式,至于为什么可以代替,大家举两个示例,计算一下就可以知道.
2024-12-08 22:24:11
1344
12
原创 Linux常用指令----上
在介绍Linux指令之前,大家要知道Linux中,”一切皆文件“这个核心概念。在接下来的介绍中我会适当引入,Wundows的界面操作,以方便大家理解。
2024-12-08 13:21:43
1490
70
原创 C语言文件操作(一篇全搞定)
在c/c++学习过程中,如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们就要使用文件操作。前面都是概念的讲解,如果不想看,请直接跳入第三节,那个不可以跳。如果想收获更多,就不要跳过。磁盘(硬盘)上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件。
2024-12-08 13:20:25
1251
5
原创 leetcode刷题
这篇文章,主要分享是给大家分享几道利用递归解决的简单题目。如果你在备战蓝桥杯、ACM等,我想会对你有帮助。递归思想:把一个大型复杂问题层层转化为一个与原问题相似,但规模较小的子问题来求解;直到子问题不能再被拆分,递归就结束了。简单来说,递归就是将一个问题分解为多个逻辑相同的子问题来解决。由于身体不舒服,这块准备的好多知识,例题都没有介绍,我们会将他们都总结到下一篇,大家见谅!!
2024-12-04 23:31:07
754
6
原创 c++异常(看过之后随便把玩)
终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误。下面这个就是错误码实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误。
2024-12-03 16:35:44
1246
28
原创 智能指针(带图讲解,一篇搞定)
智能指针是C++ 中的一种数据类型,用于自动管理动态分配的内存。内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。到这里我们就介绍完了,由于篇幅较长,又都是手敲,可能会有打字错误,请大家见谅!!
2024-12-03 16:34:05
1329
39
原创 c++哈希(开散列原理及实现)
在上篇文章中我们详细介绍了,哈希的思想及实现原理,也认识到了闭散列最大的缺陷就是空间利用率比较低,容易这也是哈希的缺陷。怎么来解决这个问题呢?下面我们就来学习一种新的方法————————开散列(链地址法)我们想要利用单链表形式来存储关键码,首先要定义链表结点。注:代码的注释可以帮助我们理解//链接结点//存储关键码:_kv(kv){}总的来说,这部分代码实现比较简单,主要时掌握哈希思想。
2024-11-30 18:03:23
1864
47
原创 c++哈希表(原理、实现、开放寻址法)适合新手
红黑树平衡树和哈希有不同的用途。红黑树、平衡树这类数据结构是有序的数据结构,它们可以高效地进行范围查询,比如查找一个区间内的值。在需要保持数据有序存储,并且频繁进行插入、删除和查找操作的场景下很有用,像数据库索引的实现就可能会用到。而哈希主要用于快速的数据查找。它通过一个哈希函数把数据映射到一个特定的位置,理想情况下,查找操作可以在常数时间复杂度内完成,也就是时间复杂度为O(1)。在只需要快速判断某个元素是否存在的场景下,哈希就非常合适。
2024-11-30 17:59:18
1125
16
原创 二叉搜索数(二叉排序树、二叉查找树)-----详解
二叉搜索树又称二叉排序树,它或者是一棵空树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树在学习树型结构时,希望大家可以画图理解!!!!
2024-11-20 23:12:07
2121
55
原创 c++多态(深度刨析)
在开始学习多态之前,首先要掌握继承的概念、实现、原理,这篇文章可以帮助大家学习->继承详解。多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。下面我们对上述条件进行分析在虚函数的后面写上 =0 ,则这个函数为纯虚函数。
2024-11-18 12:38:43
1123
50
原创 c++继承(万字详解、有图更直观易懂)
由于这块内容比较重要,知识点较多,所以在一些地方比较啰嗦,请大家见谅!继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。例如。
2024-11-11 18:11:59
2590
56
原创 c++模板入门
template<class / typename T1,......,class / typename Tn> typename用来定义模板参数关键字,也可以使用class,在这里他们两个的作用并无区别,T1....Tn均为类型占位符。template<typename T>//简单函数模板类模板是一种用来生成类定义的模板,其中可以包含一个或多个类型参数。这些类型参数可以在定义类的时候替换为任意类型,从而使得我们能够创建适用于多种数据类型的通用类定义。
2024-11-03 22:10:59
905
36
原创 new/delete和malloc()/free()的区别及其使用
在c\c++程序的开发过程中,动态开辟和管理内存是我们无法避免 的操作,而在C语言和C++中都提供了,相应的操作方法,那么我们该如何选择呢?要如何选择我们首先要知道他们各自的”能力“大小// 动态申请一个int类型的空间// 动态申请一个int类型的空间并初始化为10// 动态申请10个int类型的空间如果你不了解或忘记new的基本操作,请用上述代码回顾一下调用operator new 函数(对于数组是operator。
2024-11-03 22:10:16
1211
19
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人