自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 main()函数带参数的用法

摘要:本文详解C语言中main()函数的带参用法,重点介绍两种标准格式:常用双参数形式(int argc, char *argv[])用于接收命令行参数,以及Linux专用的三参数扩展形式。通过三个实用代码示例,展示了参数解析、文件复制工具和环境变量打印的实现方法,并总结了关键注意事项,如参数类型转换、空格处理和返回值含义等。文章强调双参数格式是开发必备技能,三参数格式仅作了解即可。

2025-12-28 21:35:05 255

原创 柔性数组(C语言)

摘要:柔性数组是C语言中结构体的最后一个成员,允许定义可变长度数组,其特点包括必须位于结构体末尾、不占用结构体空间等。相比指针方式,柔性数组优势在于节省内存(无需指针)、内存连续访问更快、内存管理更简单(只需一次malloc/free)。使用示例展示了如何正确分配和使用柔性数组,并对比了指针方式的缺点。注意事项包括必须动态分配、不能静态定义、不能直接拷贝结构体等。典型应用场景包括动态字符串缓冲区等需要灵活内存管理的场景。

2025-12-27 16:07:19 253

原创 匿名管道、命名管道、共享内存、消息队列 详解+代码实现+全维度对比

本文详细介绍了Linux系统下四种常用的进程间通信(IPC)方式:匿名管道、命名管道、共享内存和消息队列。匿名管道仅支持有血缘关系的进程间单向通信,命名管道通过文件标识支持无血缘进程通信。共享内存是最快的IPC方式,但需配合同步机制使用。消息队列则按消息类型分类传输,适合优先级通信场景。文章提供了每种IPC方式的C语言实现代码示例,包括父子进程通信、无血缘进程通信以及共享内存与信号量的同步使用。这些IPC方式各有特点,适用于不同场景下的进程间数据传输需求。

2025-12-27 15:30:35 826

原创 Linux动静态库与动静态链接

本文介绍了Linux开发中的静态库和动态库概念。静态库(.a)在编译时将代码复制到可执行文件中,使程序独立运行但体积较大;动态库(.so)在运行时加载,允许多个程序共享,节省内存且更新方便。文章提供了C语言示例,详细演示了从编写库代码到编译链接的完整流程,包括静态库的ar打包和动态库的-fPIC编译选项。最后通过运行验证了两种链接方式的特性:静态链接程序不依赖外部库,而动态链接程序需要正确设置库路径才能运行。

2025-12-26 09:55:34 230

原创 软/硬链接对比

本文介绍了Linux系统中硬链接和软链接的基本概念与区别。硬链接是文件的另一个名称,与原文件共享inode,删除原文件不影响硬链接访问;软链接则是存储目标路径的特殊文件,依赖原文件存在。通过代码示例演示了如何创建两种链接,并验证了硬链接修改内容会同步到原文件,删除原文件后硬链接仍有效,而软链接会失效的特性。两种链接在跨文件系统支持、目录链接等方面也存在差异。

2025-12-26 09:12:12 185

原创 inode与struct file的联系

摘要: Linux文件系统中,inode(索引节点)和struct file分别管理文件的静态元数据和动态访问状态。inode存储持久化属性(如权限、数据块位置),而struct file记录进程级信息(如读写偏移、打开模式)。核心关联体现在: struct file通过f_inode指针绑定inode; 多进程打开同一文件时共享inode,但拥有独立的struct file实例; 文件操作中,inode维护全局属性,struct file管理进程局部状态。二者协作实现文件从磁盘存储到内存访问的完整链路。

2025-12-22 00:43:55 609

原创 操作系统中inode详细演示

本文通过Python代码示例解析了文件系统中inode的核心概念和工作原理。首先介绍了inode作为文件"身份证"的核心属性,包括编号、类型、权限、大小等元数据。然后通过两部分代码演示:1)用Python类模拟inode数据结构,展示如何创建inode并关联数据块;2)使用os模块获取Linux系统真实文件的inode信息。这些示例直观展示了inode如何存储文件元数据并指向实际数据块,帮助理解文件系统的底层机制。

2025-12-21 15:49:46 869

原创 操作系统中struct_file的实现(C语音)

struct file 是 Linux 内核中用于管理打开文件的核心数据结构,存在于内存中,记录文件的动态状态(如读写位置、访问模式等)。与磁盘存储的静态 inode 不同,struct file 的生命周期从 open() 到 close(),一个文件可能对应多个 struct file(多进程访问)。关键字段包括文件路径、读写偏移量、操作函数指针和引用计数。通过模拟代码可清晰看到其与文件操作(读/写/打开/关闭)的关联机制,是用户程序与磁盘文件交互的关键桥梁。

2025-12-21 15:48:13 470

原创 剖析 Linux 打开文件的三大核心数据结构(fd / 文件表 /inode)

Linux内核通过三层结构管理文件访问:进程级的文件描述符表(fd)、系统级的文件表(struct file)和文件系统级的inode表(struct inode)。文件描述符表将进程的fd映射到全局文件表项,文件表保存动态信息如偏移量和打开模式,inode表存储文件的静态元数据和磁盘位置。这种分离设计实现了多进程文件共享和灵活访问控制,如通过dup()或fork()共享文件表项时,多个fd会同步更新文件偏移量。内核通过引用计数管理资源,当文件表项引用计数归零时释放资源。

2025-12-21 01:58:25 809

原创 进程程序替换

本文解析了Unix/Linux系统中进程程序替换的核心机制,重点阐述了exec函数族的工作原理。通过fork()创建子进程后,使用execvp()将子进程替换为ls程序并传递-l、-a参数,实现了Shell启动外部程序的典型流程。文章详细展示了从代码编写到编译运行的完整实践过程,包括参数构造、错误处理和进程回收。该机制保持了进程PID不变仅替换执行上下文,是系统进程管理的基础设计思想。通过这个ls程序调用案例,生动演示了"创建-替换-回收"的标准进程操作流程。

2025-11-30 17:29:43 225

原创 Linux的粘制位和常用命令

摘要:Linux粘滞位是一种特殊权限标志,主要用于目录权限控制,防止用户随意删除他人文件(如/tmp目录)。通过chmod设置(o+t或1777),显示为权限位末的"t"。现代应用中,粘滞位确保共享目录中只有文件所有者能删除文件。配合常用命令如ls、chmod等使用,可有效管理文件安全。命令学习建议分类掌握,从基础文件操作到系统管理,通过组合命令和帮助系统(man/--help)逐步提升Linux技能。粘滞位与命令体系的结合是Linux高效管理的重要基础。

2025-10-23 23:44:01 919

原创 计算机的组成硬件及其功能

计算机主要由CPU、存储器和输入输出设备组成。CPU作为核心部件,包含控制器、运算器、寄存器等组件,负责指令控制、数据处理等核心功能。存储器分为主存(RAM、ROM)和辅存(硬盘、SSD等),分别实现高速访问和大容量存储。输入设备(键盘、鼠标等)和输出设备(显示器、打印机等)则实现人机交互。这些组件协同工作,共同完成计算机的各项任务。

2025-09-24 22:22:01 1005

原创 二叉搜索树详解

本文介绍了二叉搜索树(BST)的概念、C++实现及常见操作。BST是一种有序二叉树,满足左子树节点值小于根节点,右子树节点值大于根节点,其中序遍历结果有序。文章提供了BST的完整C++实现,包括节点定义、插入、查找、删除等递归操作,时间复杂度平均为O(log n),最坏情况下为O(n)。还讨论了BST的验证、第k小元素查找和层序遍历等扩展问题,并建议使用平衡二叉搜索树来优化最坏情况性能。

2025-08-02 17:25:24 169

原创 类模板与模板类

C++中"类模板"和"模板类"本质相同,都指用于生成具体类的模板。类模板是通用框架(如template <typename T> class Box),通过指定类型参数可实例化为具体模板类(如Box<int>)。完整示例展示了从定义到使用过程,其中类模板是"配方",模板类是"成品"。实际编程中术语常混用,但概念上类模板强调模板定义,模板类指实例化后的具体类型。

2025-06-06 23:21:48 269

原创 c++ const成员函数详细介绍

const成员函数通过在函数声明和定义的参数列表末尾添加const关键字来标识,表明该函数不会修改调用对象的状态。cpppublic:// 声明const成员函数// 普通成员函数public:// 声明const成员函数// 普通成员函数// 定义时必须保持const一致性核心作用:通过隐式修改this指针类型(),禁止函数内修改非mutable成员变量。语法要求:声明和定义必须同时添加const,否则编译器视为不同函数,导致链接错误。

2025-04-21 19:38:26 1112

原创 c++运算符重载

所以,c++规定,后置++时,增加一个int形参,与前置++构造函数重载,方便区分。但是如果一个重载运算符函数是成员函数,则它的第一个运算对象默认传给隐式指针this,因此运算符重载作为成员函数,参数比运算符少一个。·之前我们学习过运算符,主要是用于内置类型变量之间的操作,而今天我们所讲的运算符重载,是针对自定义类型对象之间来操作的。·重载运算符函数的参数个数和该该运算符作用的运算对象一样多,一元运算符有一个参数,二元运算符有两个参数。返回值类型 类名::operate重载的运算符。

2025-04-17 21:43:18 406

原创 c++拷贝构造

2.2.拷贝构造函数的第一个参数必须是类类型对象的引用,使用传值方式编译器直接报错,因为语法逻辑上会引发无穷递归调用。拷贝构造函数也可以有多个参数,但是第一个参数必须是类类型对象的引用,后面的参数必须有默认值。自动生成的拷贝构造函数对内置类型成员变量会进行浅拷贝(一个字节一个字节拷贝),对自定义类型成员变量会调用它的拷贝构造。概念:如果一个构造函数的第一个参数是自身类类型引用,并且任何额外的参数都有默认值,则此构造函数也叫拷贝构造函数,也就是说拷贝构造函数是一种特殊的构造函数。

2025-04-16 23:29:35 323

原创 类与对象的使用

class 类名{public:公有变量和函数private:私有变量和函数protected:保护变量和函数类名 对象名例如:public:int r=10;Data a;a.Print();结果:·class为定义类的关键字,后面紧跟着的是类名,{}中为类的主体,注意定义结束后面的分号不能省略。类中的内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或成员函数。

2025-04-02 21:24:35 974

原创 整数和浮点数在内存中的存储

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8个bit位,但是在c语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在一个如何将多个字节安排的问题。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE754规定,存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;

2024-12-27 10:44:22 874

原创 【无标题】数组和函数的实现:扫雷游戏

这里我们肯定有解决办法,比如:雷和非雷的信息不要使用数字,使用某些字符就行,这样就避免冲突了,但是这样做的棋盘有雷和非雷的信息,还有排查出的雷的个数信息,就⽐较混杂,不够⽅便。再继续分析,我们在棋盘上布置了雷,棋盘上雷的信息(1)和非雷信息(0),假设我们排查了某一个位置后,这个坐标处不是雷,这个坐标周围有一个雷,那我们需要将排查出的雷的数量信息记录存储,并打印出来,作为排雷的重要参考信息。扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要一定的数据结构来存储这些信息。9的数组来存放信息。

2024-12-12 21:20:40 623

原创 c语言分支循环语句

C语言中的循环结构有三种常见的语句,分别是while、for、do-while循环,他们大同小异,结构上基本分为初始化部分,条件判断部分,调整部分,下面来看一下。我们输入180的时候,执行else里的语句,先执行printf(“输入错误,请重新输入\n”)然后执行goto again,again在程序最开始,所以我们可以重新输入然后继续进行选择判断。注解:当i = 5的时候,后面的语句直接跳过,再回到while循环的判断语句中执行,此时i仍然是等于5,继续跳过,这样下去一直是死循环。

2024-08-05 17:07:46 1140

原创 来博客的第一天

Hello!我是一名即将步入大二的计算机小白。姓名:XXX(三个字)性别:男年龄:大学二年级(0~110之间)学校:江西一所非著名大学专业:计算机科学与技术。

2024-07-21 17:00:14 301

空空如也

空空如也

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

TA关注的人

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