自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 Linux系统:进程程序替换以及相关exec接口

进程程序替换是指用新程序的代码、数据和堆栈完全替换当前进程的地址空间(加载新程序到内存、更新页表映射、初始化虚拟地址空间,并将进程控制块(PCB)指向新程序),使进程执行新程序的逻辑,而进程ID(PID)保持不变。函数参数传递方式环境变量路径搜索示例调用execl可变参数列 表继承需完整路 径execlp可变参数列表继承支持PATHexecle可变参数列表显式传递需完整路径execv参数数组继承需完整路径execvp参数数组继承。

2025-05-02 09:17:36 895 12

原创 Linux系统:详解文件描述符与重定向原理以及相关接口(open,read,write,dup2)

我们知道,Linux系统天然支持多进程,当多个进程打开多个文件时,一方面系统会给每个打开的文件创建struct file结构体并链入到全局链表中,另一方面,每个进程PCB中都会管理和维护一张文件描述符表(本质是以struct file* 为元素的指针数组)用来指明当前进程打开了多少个文件。,用于抽象地引用进程已打开的文件、套接字(Socket)、管道(Pipe)、设备文件等I/O资源。用户对文件的操作本质是进程对文件的操作,文件的管理者是操作系统,对文件的操作是通过文件相关的系统调用接口来实现的。

2025-05-02 09:15:36 730 9

原创 Linux系统:详解进程等待wait与waitpid解决僵尸进程

进程等待是操作系统中父进程与子进程协作的核心机制,指父进程通过特定方式等待子进程终止并回收其资源的过程。这一机制的主要目的是避免子进程成为僵尸进程,从而释放系统资源并维护进程表的完整性。

2025-04-19 11:45:35 736 8

原创 Linux系统:进程终止的概念与相关接口函数(_exit,exit,atexit)

exit函数是 C 和 C++ 标准库中的一个重要函数,用于终止程序的执行,并返回一个退出状态码给父进程或操作系统。是 C 标准库中的一个函数,用于注册程序在正常终止时要执行的函数。通过atexit注册的函数只有程序通过exit或return从main函数中返回,或者调用_exit之外的终止函数时才会被调用。这里特别要注意的是, 当传入的错误码无法识别的时候strerror函数就会返回一个“Unknown error”的字符串。调用exit函数时程序会立即终止执行,后续的代码不会执行。

2025-04-19 11:44:48 861 8

原创 Linux系统:进程状态与僵尸、孤儿进程

在这里我们称当进程处于运行队列中时进程就处于运行状态,也就是说当进程处于运行队列等待被调度和占用CPU都可以称为运行状态。即:运行状态=进程占用CPU+进程处于运行队列在操作系统中,阻塞状态是进程生命周期中的一个重要阶段,表示进程因等待某种资源(如I/O操作、锁、信号等)而暂时无法执行,此时即使CPU空闲,进程也无法运行,因为所需资源尚未就绪。操作系统会保存其上下文(如寄存器状态),待事件发生后恢复执行。

2025-03-30 17:07:54 940 16

原创 数据结构:探秘AVL树

AVL树的实现引入一个平衡因子的概念(balance factor)的概念,每个节点都有一个平衡因子,任何节点的平衡因子等于右子树高度减去左子树高度,也就是说任何节点的平衡因子等于0/1/-1,AVL树并不是必须要平衡因子,但是有了平衡因子可以更方便我们去进行观察和控制树是否平衡,就像一个风向标一样。说明更新之前parent节点平衡因子为1或-1也就是左右子树一边高一边低,节点插入在低的一边,插入后左右平衡不会影响上一级节点的平衡因子。它的左右子树都是AVL树,且左右子树的高度差的绝对值不超过1。

2025-03-29 19:41:29 753 11

原创 Linux系统之美:环境变量的概念以及基本操作

我们以往的Linux编程经验告诉我们,我们在对一段代码编译形成可执行文件后执行可执行文件必须声明可执行文件所在的路径,路径可以是相对路径也可以是绝对路径:而如果我们不加上./也就是不加上可执行文件的完整路径,系统就会出现以下报错:表示命令行解释器(bash)无法找到该命令的可执行文件和该命令的实现方法。系统命令的实现与上述别无二致,其主要步骤如下:a、开发者使用编程语言(如C、C++、Shell等)编写命令的源代码。源代码包含了实现命令功能的逻辑和算法。

2025-03-22 10:16:44 1248 16

原创 C语言文件操作入门

在计算机领域,文件是存储数据的核心单位,用于将信息以特定格式保存在物理存储设备(如硬盘、SSD)中。

2025-03-18 17:10:59 818 11

原创 Linux系统之美:进程初识

Bash进程是当用户登录到Linux系统并启动Bash Shell时创建的一个进程。它是用户与系统交互的主要界面,允许用户通过命令行输入命令来执行各种任务。

2025-03-15 10:12:01 1103 13

原创 逻辑的诗:类与对象(下)

内部类是一个独立的类,跟定义在全局相比,他只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含内部类。内部类默认是外部类的友元类。

2024-12-24 16:28:56 1136 16

原创 C++的诗行:类与对象(中)

默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后的取地址重载不重要我们稍微了解一下即可。默认成员函数很重要,也比较复杂,我们要从两个方面去学习:构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象(我们常使用的局部对象是栈帧创建时,空间就开好了)而是对象实例化时初始化对象。构造函数的本质是要替代我们以前Stack和Date

2024-12-18 10:23:58 914 13

原创 linux项目自动化构建工具-make/makefile

这里需要注意的是:要执行clean直接make是不行的,make默认会执行makefile文件中的第一条指令也就是编译工作,要执行clean我们需要写 make clean 指定。此时我们进行make,就会自动执行四条指令生成我们指定的四个文件(day.i、day.s、day.o、day.exe)。$@ 相当于$(BIN),$^相当于$(SRC)两者分别指代的就是day和day1.c,语法不做解释。因此有了变量只要改变变量的指向我们就可以完成大量代码中相关代码的替换,提高了我们的工作效率。

2024-12-01 12:08:28 1038 4

原创 C++入门基础

C++的第一个程序,命名空间的定义与使用,C++的输入与输出,缺省参数的定义与注意事项,什么是函数重载,引用的定义与使用以及注意事项,inline函数,nullptr

2024-11-26 10:33:37 768 10

原创 类和对象(上)

class为定义类的关键字,Stack为类的名字,{ }中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者m但这也不是强制性的,具体看要求。C++中struct 也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是struct中可以定义函数,但是一般情况下我们还是推荐用class定义类。

2024-11-13 13:43:02 1088 2

原创 顺序结构二叉树——堆

树是一种非线性的数据结构,它是由有限个节点组成的一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说他是根朝上而叶子朝下的,如图:树的相关描述:节点的度: 一个节点含有的子树的个数称为该节点的度树的度: 树的所有节点的度中最大的称为该树的度叶节点或终端节点: 度为0的节点称为叶节点非终端节点或分支节点: 度不为0的节点双亲节点或父节点: 若一个节点含有子节点,则称这个节点为其子节点的父节点或双亲节点孩子节点或子节点: 一个节点含有的子树的根节点称为该节点的子节点兄弟节点: 具有相同父

2024-10-30 17:16:55 760 3

原创 linux权限与相关指令

学习了文件掩码便给我们设置新文件(夹)的默认权限提供了思路,这样我们可以根据不同的具体需求设置不同的umask值,以满足不同的使用场景提高我们代码的灵活性与可控性,例如开发人员可能需要更宽松的权限以便于调试,而生产环境中可能需要更严格的权限以确保安全性。首先系统会判断用户是否是该文件(夹)的拥有者,若是则返回拥有者所对应的权限,若不是拥有者则判断用户是否是或在该文件(夹)的所属组,若是则返回所属组所对应的权限,若不是所属组则用户只能是其他用户,返回other的相应权限。答

2024-10-18 12:21:38 775 2

原创 C语言操作符(万字全收录!全解析!)

代码1:变量的定义。

2024-03-10 22:20:19 2586 3

原创 C语言数组学习总结

因为数组的元素都是内置类型的,所以如果把一维数组作为数组的元素,这个数组就是二维数组,将二维数组作为数组的元素就会得到三维数组,二维数组以上的数组统称为多维数组。在C99标准之前,C语言在创建数组的时候,数组大小指定时只能用常量和常量表达式,或者在初始化数组的时候可以省略数组的大小。此时,arr就是一个变长数组,数组的大小取决于变量n的值,编译器没法事先确定,只有运行时才可确定数组的大小,这就使得。二维数组的访问也是使用下标的形式,二维数组是有行和列的,只要确定了行和列就可以唯一确定数组中的一个元素。

2024-02-10 11:27:04 1997

原创 函数学习总结

C语言学习总结

2024-02-05 20:07:46 1435

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除