自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据库——day1

SQLite3轻量级数据库入门指南 SQLite3是一款开源的嵌入式关系型数据库,具有轻量、无需安装、单文件存储等特点。文章从数据库基础概念入手,详细介绍了SQLite3的核心特性、安装方法、命令行操作(包括DDL、DML、DQL三类SQL语句)以及C语言编程接口。通过学生信息管理系统实战案例,展示了创建表、增删改查等基本操作。SQLite3特别适合移动应用、嵌入式设备和小型项目使用,是数据管理的理想选择。

2025-07-28 20:20:53 1041

原创 深入理解 IO 多路复用:从 select 到 epoll

本文深入解析了IO多路复用技术,重点对比了select和epoll两种机制。首先介绍了四种基础IO模型:阻塞IO(效率低)、非阻塞IO(轮询消耗CPU)、并行IO(资源消耗大)和多路IO(高并发首选)。然后详细讲解了select和epoll的工作原理:select通过轮询检测FD状态,最多支持1024个连接;epoll采用主动通知机制,无连接数限制,性能更优。最后总结指出,epoll因其O(1)复杂度、高扩展性,成为Nginx、Redis等高性能服务器的首选IO模型。理解这些原理有助于开发者根据场景选择合适

2025-07-24 20:42:31 1064

原创 深入浅出理解 TCP 与 UDP:网络传输协议的核心差异与应用

摘要: TCP与UDP是核心传输层协议,分别针对不同场景优化。UDP轻量无连接,支持广播/组播,实时性强但可能丢包,适用于直播、音视频传输;TCP通过三次握手/四次挥手建立可靠连接,提供有序传输与丢包重传,但可能黏包,需通过固定长度或自定义协议解决,适合文件传输等场景。此外,CS架构依赖专用客户端与灵活协议,BS架构基于浏览器与HTTP协议。理解协议差异及架构特点,可优化网络应用设计。(150字)

2025-07-22 19:43:11 830

原创 网络编程之 UDP:用户数据报协议详解与实战

本文深入解析UDP协议的无连接、不可靠但高效等特性,详细介绍了UDP编程框架中的核心函数sendto()和recvfrom(),并通过C语言实现的测试程序、点对点聊天和聊天室三个实战案例,展示了UDP在实时通信中的应用。文章对比了UDP与TCP的差异,指出UDP适合实时性要求高的场景,虽然不保证可靠传输,但通过上层设计可弥补不足,在音视频传输、DNS等领域具有独特优势。

2025-07-21 21:15:31 561 1

原创 网络编程基础:从 OSI 模型到 TCP/IP 协议族的全面解析

本文将从基础理论入手,详细解析 OSI 模型和 TCP/IP 协议族,然后深入探讨 TCP 编程的基础知识,最后介绍常用的网络测试工具。网络编程是一个复杂而庞大的领域,本文从 OSI 模型和 TCP/IP 协议族出发,详细介绍了 TCP 编程的基础知识和实践技巧,以及常用的网络测试工具。掌握这些内容是进行网络编程的基础,希望读者通过本文能够建立起完整的网络编程知识体系,并在实践中不断深化理解。通过后续的练习和作业(如发送结构体数据、文件传输等),读者可以进一步巩固所学知识,逐步成为网络编程的高手。

2025-07-21 20:37:25 982

原创 操作系统进程间通信

进程间通信的本质是打破进程地址空间的隔离,实现数据或信号的传递。古老的通信方式:无名管道、有名管道、信号(本文重点);IPC 对象通信:System V 标准的共享内存、信号量集等(高效但复杂);Socket 通信:跨网络的进程通信(支持单机与网络场景)。其中,信号是唯一的异步通信方式(无需进程主动等待),共享内存是效率最高的通信方式(直接操作物理内存),而管道则是最易上手的入门级通信方式。c运行// 自定义SIGINT处理函数(替代默认终止)

2025-07-19 15:44:15 1152

原创 线程控制:互斥与同步

多线程编程中的互斥与同步机制是解决资源共享冲突的核心技术。互斥通过互斥锁(Mutex)实现临界资源的排他访问,确保同一时刻只有一个线程操作共享资源;同步则通过信号量(Semaphore)控制线程执行顺序,实现"先生产后消费"等协作场景。文章详细介绍了互斥锁和信号量的使用框架、关键函数及应用示例,包括共享变量保护、字符数组安全写入和火车票售票系统等典型场景。同时指出死锁产生的四个必要条件,并提出按序申请资源、限时申请等规避建议。这些机制是多线程程序安全高效运行的基础,开发者需根据实际需求合

2025-07-18 19:35:00 1272

原创 操作系统——进程

本文深入解析了操作系统中的进程概念及其关键特性。文章首先界定进程是程序的动态执行过程,详细介绍了进程控制块(PCB)包含的关键信息。通过对比程序和进程,阐明了动态与静态的本质区别。重点讲解了进程状态转换模型、调度算法(如时间片轮转和优先级调度)以及Linux特有的进程状态分类。文章还提供了Linux进程管理命令和C语言中操作进程的核心系统调用(fork、getpid等),并通过实践案例演示了多进程文件操作。最后简要提及进程内存布局和虚拟内存映射机制,完整呈现了进程从创建到消亡的生命周期。

2025-07-15 20:53:22 865

原创 基于POSIX标准的pthread线程编程

本文全面解析基于POSIX标准的pthread线程编程。线程作为轻量级执行单元共享进程资源,具有创建高效、通信简单等优势,但也存在共享资源易冲突、调试复杂等挑战。文章详细介绍了pthread库的核心功能:线程创建与回收(pthread_create/join)、属性设置、清理机制,以及参数传递和返回值处理的技巧。同时总结了线程调试方法(gdb命令)和常见问题(栈地址失效、资源竞争等)。线程在多任务处理中平衡了效率与复杂度,是发挥多核性能的重要工具,但需要配合同步机制解决资源共享问题。

2025-07-15 20:37:43 800

原创 Linux 文件 IO 详解:从系统调用到实际操作

本文介绍了Linux文件IO的核心概念与操作方式。主要内容包括:1)Linux文件IO的系统调用与C库封装区别;2)文件类型、权限解析及umask机制;3)文件描述符的作用;4)open/read/write等核心系统调用;5)目录操作函数;6)C库IO函数的缓冲区优势;7)通过文件复制示例演示系统调用的实际应用。文章强调理解Linux"一切皆文件"的设计理念,掌握不同场景下的文件操作选择(系统调用适合设备文件,C库函数适合普通文件),为Linux系统编程打下坚实基础。

2025-07-10 18:50:24 1028

原创 深入理解 Linux 中的 stat 函数与文件属性操作

本文详细介绍了Linux系统编程中获取文件属性的stat函数。该函数通过文件路径将状态信息填充到stat结构体,包含设备ID、inode编号、文件类型、权限、大小等关键元数据。文章重点解析了三个时间戳(atime访问时间、mtime修改时间、ctime状态改变时间)的区别,以及如何理解ll命令输出与stat结构体成员的对应关系。同时提供了错误处理方法和一个实用示例程序,展示如何用stat实现简易文件信息查看器。掌握stat函数的使用是深入了解Linux文件系统工作机制的基础。

2025-07-10 18:46:10 1278

原创 数据结构day7——文件IO

本文系统介绍了C语言标准IO库的核心概念与使用。主要内容包括:标准IO的起源与缓冲机制(行缓冲、全缓冲、无缓冲),Linux文件类型与分类,标准IO与文件IO的区别,FILE指针与流的概念,常用函数(fopen/fclose、字符/行/块操作、文件定位等)的使用方法。通过实现简易cat程序和文件拷贝功能的示例,展示了标准IO的实际应用。标准IO作为C语言标准库的重要组成部分,其缓冲机制和丰富函数族为文件操作提供了高效便捷的解决方案,是C程序员必须掌握的基础知识。

2025-07-01 20:22:26 1775

原创 数据结构day6——内核链表

Linux内核链表采用创新的"嵌入式"设计思想,将链表节点(list_head)作为数据结构成员而非容器,实现高度通用性。其核心机制包括:1) 双向循环链表结构;2) container_of宏实现节点到宿主结构的逆向定位;3) 类型安全的遍历宏。相比传统链表,这种设计消除了数据类型绑定,显著提升代码复用率,同时保持O(1)时间复杂度的增删操作。内核链表广泛应用于进程管理、设备驱动等核心模块,其设计理念也可移植到用户空间。该结构通过精巧的指针运算和宏定义,展示了Linux内核高效的内存管

2025-07-01 20:08:33 444

原创 散列表查找(哈希表)

散列表是一种根据键(Key)直接访问内存存储位置的数据结构。它通过一个哈希函数(Hash Function)将键映射到一个固定大小的数组索引上,这个索引位置称为槽(Slot)或桶(Bucket),从而实现快速的数据访问。散列表是一种以空间换时间的数据结构,通过哈希函数和冲突解决机制,实现了平均 O (1) 时间复杂度的高效操作。本文通过 C 语言实现了一个基于链地址法的散列表,包含了插入、查找、删除等核心操作,并支持自动扩容以维持较低的负载因子。

2025-07-01 19:42:58 921

原创 数据结构day5——队列和树

本文介绍了两种基础数据结构:队列和树。队列遵循先进先出(FIFO)原则,重点讲解了顺序队列和循环队列的C语言实现,循环队列通过环形结构解决了假溢出问题。树结构重点阐述了二叉树的特性、存储方式和四种遍历方法(前序、中序、后序、层序),并提供了链式存储的C语言实现。这两种结构各具特色:队列作为有序缓冲区应用于任务调度,而树则以层次关系处理复杂数据。掌握它们对于解决编程问题具有重要意义。

2025-07-01 19:35:01 928

原创 数据结构day4——栈

本文介绍了栈这一遵循后进先出(LIFO)原则的线性数据结构。首先阐述了栈的核心概念,包括其表尾操作特性和常见应用场景。重点讲解了两种C语言实现方式:基于数组的顺序栈(实现简单但容量固定)和基于链表的链式栈(动态扩容但实现复杂),并提供了完整的代码示例。最后列举了栈在表达式求值、括号匹配、函数调用等领域的典型应用,建议根据实际需求选择适合的实现方式。掌握栈的实现原理有助于解决实际编程问题,并为学习更复杂的数据结构奠定基础。

2025-07-01 19:30:01 834

原创 关于Makefile

《Makefile简明指南》:Makefile是C/C++项目自动化构建的核心工具,通过定义文件依赖关系和编译规则实现高效增量编译。基础语法包含目标(target)、依赖(prerequisites)和命令(commands)三要素,支持变量定义和模式规则(如%.o:%.c)简化编写。高级特性包括函数处理、条件判断和递归调用,典型应用场景为管理多模块项目。最佳实践建议使用.PHONY声明伪目标、添加清理规则和并行编译优化。尽管学习曲线较陡,但掌握Makefile能显著提升构建效率,对于中小型项目尤为适用,大

2025-06-24 20:15:06 927

原创 数据结构day2

摘要:文章介绍了Makefile工具和内存调试工具Valgrind的使用方法。Valgrind作为开源工具集,能检测内存泄漏、数组越界等问题,通过命令"valgrind./a.out"运行程序后,报告包含HEAPSUMMARY(堆内存使用情况)和LEAKSUMMARY(内存泄漏分类)。随后分析了顺序存储的优缺点,包括访问高效(O(1))但增删耗时(O(n))的特点。最后讲解了链式存储结构,通过结点(数据域+指针域)实现动态存储,并给出C语言中单向链表的实现方式(包含person数据结构和

2025-06-24 20:10:01 919

原创 数据结构day1

本文摘要:数据结构是相互关联的数据元素集合,包括逻辑结构(集合、线性、树、图)和物理结构(顺序、链式存储)。数据元素由数据项组成,抽象数据类型(ADT)定义数据集合及其操作。算法需具备输入输出、有穷性、确定性等特征,设计时应考虑正确性、可读性、高效性。时间复杂度分析遵循特定规则,常见复杂度排序为O(1) < O(logn) < O(n) < O(nlogn) < O(n²)等。线性表是有限元素序列,包含创建、销毁、遍历和插入等基本操作,通过结构体和指针实现顺序存储管理。

2025-06-23 19:47:00 574

原创 C语言——枚举

目录一、枚举的基本概念1. 定义与语法2. 枚举变量的声明二、枚举的特性1. 整型常量的本质2. 作用域规则3. 内存占用三、枚举的使用场景1. 替代宏定义常量2. 状态机实现3. 函数返回值类型四、枚举与其他类型的对比五、高级技巧与注意事项1. 位掩码枚举2. 枚举与字符串的映射3. 编译器警告与枚举完整性六、总结在 C 语言中,枚举(Enumeration)是一种基本数据类型,它允许程序员定义一组命名的整型常量,提高代码的可读性和可维护性。本文将深入探讨 C 语言枚举的语法、特性、使用场景以及一些高级技

2025-06-18 20:13:55 926

原创 C语言——共用体

共用体的定义与结构体类似,但使用关键字union。// ... 其他成员与结构体不同的是,共用体的所有成员共享同一块内存空间,因此共用体的大小取决于其最大成员的大小。共用体是 C 语言中一种强大但需要谨慎使用的特性。它通过共享内存空间提供了内存效率的优化,适用于需要在不同数据类型间切换使用的场景。然而,由于数据覆盖的风险,使用共用体时必须特别小心,确保始终访问正确的成员类型。

2025-06-18 20:05:07 644

原创 C语言——结构体

本文介绍了C语言中结构体的基本概念和使用方法。首先讲解了结构体的定义方式,包括两种变量声明方法。然后详细说明了如何通过点运算符访问结构体成员。接着介绍了结构体数组的创建和初始化方法。最后解释了结构体指针的使用,包括两种访问成员的方式:解引用后使用点运算符或直接使用箭头运算符。文中还特别提醒结构体使用时需先定义类型再定义变量,以及指针类型形参的设计考量。

2025-06-17 20:15:23 492

原创 C语言——指针

本文系统讲解C语言指针的核心概念与应用。指针本质上是内存地址的直接操作工具,通过基类型*指针变量名的语法定义。文章详细阐述了指针的直接/间接访问特性、函数参数传递的两种方式(值传递与地址传递),以及指针的四种基本运算:加减整数、指针间减法、比较运算和递增递减。特别分析了指针与数组的关系,数组名可作为首元素地址通过指针运算访问。这些知识不仅揭示了计算机内存的工作原理,也为实现高效编程、动态内存管理和复杂数据结构提供了基础。理解指针是掌握C语言高级特性的关键。

2025-06-12 20:17:45 714

原创 C——预处理

本文系统介绍了C语言预处理的基本概念和应用。预处理作为编译前的文本处理阶段,主要完成文件包含、宏替换和条件编译等任务。文章详细解析了#include、#define等常用指令的使用方法,并通过实例展示了预处理在防止头文件重复包含、跨平台开发等场景的实际应用。同时分析了预处理的优缺点,指出其虽能提高代码复用性和性能,但过度使用可能导致调试困难和可读性降低。最后对比了预处理与编译阶段的区别,强调合理使用预处理技术的重要性。为C语言开发者掌握预处理机制提供了实用指导。

2025-06-11 21:37:13 711

原创 C++函数

C++ 函数的灵活性和强大功能是其成为系统级编程语言的重要原因。从基础的函数定义到高级的模板元编程,函数在 C++ 中扮演着核心角色。掌握函数的各种特性,能够帮助你写出更加高效、优雅和可维护的代码。希望通过本文的介绍,你对 C++ 函数有了更深入的理解和掌握。

2025-06-10 20:48:01 659

原创 C++ 输入输出

通过重载<<和>>private:int x, y;public:// 重载输出操作符return os;// 重载输入操作符return is;// 使用示例// 输出 (3, 4)C++ 的 I/O 系统通过流抽象提供了统一的操作接口,无论是控制台、文件还是内存数据,都可以使用相似的语法进行处理。标准流对象的使用(coutcincerrclog格式化输出(精度、对齐、进制转换)文件操作(文本和二进制)字符串流处理流状态检查与错误处理自定义类型的 I/O 支持。

2025-06-10 09:34:49 615

原创 C语言——函数

函数是完成特定任务的独立代码单元。一个 C 程序可以由多个函数组成,这些函数可以来自标准库,也可以由开发者自定义。函数的使用使得程序结构清晰,易于维护和调试。使用函数思想解决问题时,将大的问题拆成小的问题,直到能直接解决的程度。使用函数可以减少代码的重复编写,提升效率,可以实现高内聚,低耦合,提升系统性能;提升项目的可维护性。函数的定义包含函数头和函数体两部分。函数头指定了函数的返回类型、名称和参数列表:(1)类型说明符——返回值类型(函数处理完数据后,结果的类型)

2025-06-09 20:53:44 831

原创 C++ 数组

摘要:C++数组是内存连续的同类型数据集合,具有O(1)随机访问特性,但大小固定。文章详解了数组声明初始化、内存布局、遍历方式及多维数组处理,重点分析了数组与指针的异同。典型应用包括数据缓存和数学计算,但需注意下标越界和传参退化问题。通过成绩统计案例展示实际应用,最后建议现代开发优先使用vector/array,仅在特殊场景使用原始数组。文章系统梳理了数组的核心概念与实用技巧,帮助开发者合理选择数据结构。

2025-06-05 20:31:46 941

原创 C语言——数组

本文系统讲解C语言数组的核心概念与应用。首先剖析数组本质:连续存储的同类型数据集合,解析其内存布局特点和访问机制。详细说明了数组的定义与初始化方法,包括完全/部分初始化等不同方式。重点阐述数组的访问与遍历技巧,强调下标运算原理和越界风险。最后深入讲解数组排序算法,通过选择排序和冒泡排序的具体步骤与代码实现,帮助读者掌握数组的核心操作技巧。全文内容全面,既涵盖基础理论又包含实践指导。

2025-06-04 20:09:15 819

原创 C++ 流程控制

本文介绍了C++编程中的三种基本流程结构。顺序结构按照代码书写顺序执行;选择结构(if-else和switch)根据条件选择执行路径;循环结构(while、do-while和for)实现重复执行。文章通过具体代码示例演示了每种结构的语法和应用场景,包括嵌套结构和循环控制语句(break和continue)。掌握这些流程结构是编写高效程序的基础,合理组合它们能解决各种复杂编程问题,但需注意避免无限循环等常见错误。

2025-06-04 11:55:17 759

原创 C语言——流程控制

循环类型语法结构执行特点适用场景whilewhile(条件) { 循环体 }先判断条件,后执行循环体;可能一次都不执行。循环次数不确定,依赖条件判断。do-whiledo { 循环体 } while(条件);先执行循环体,后判断条件;至少执行一次。需要先执行操作再判断的场景(如输入验证)。forfor(初始化;条件;更新) { 循环体 }初始化、条件判断、更新三步合一,逻辑紧凑;常用于计数型循环。已知循环次数或需要明确控制循环变量的场景。

2025-06-03 21:16:08 966

原创 C++运算符

C++ 允许对运算符进行重载,使其适用于自定义类或结构体。例如,为Vector类重载注意(成员访问)、(作用域解析)、?(条件运算符)等。重载时需保持运算符的基本语义,避免破坏代码可读性。C++ 运算符体系庞大且灵活,熟练掌握各类运算符的特性与使用场景,是编写高效、清晰代码的基础。避免滥用复杂表达式,优先使用括号明确逻辑;对自定义类型合理运用运算符重载,提升代码抽象性;注意数值类型的边界问题(如整数溢出、浮点数精度)。

2025-05-30 19:48:38 837

原创 C++ 数据类型

作用:将不同类型的数据组合为一个整体,用于表示复杂对象。struct Student { // 定义结构体类型int id;// 创建结构体变量cout << tom.name << "的成绩是:" << tom.score;// 访问成员进阶特性:结构体可包含函数成员(C++ 中与 class 的区别主要在于默认访问权限)。

2025-05-30 09:14:39 2136

原创 C语言——输入输出

摘要:本文系统介绍了C语言输入输出(I/O)的核心概念和标准库函数。重点讲解了单个字符的输入输出函数getchar()/putchar(),以及格式化输入输出函数scanf()/printf()的使用方法。其中详细说明了printf()函数中各种数据类型占位符(%d、%f、%c等)和辅助控制符(宽度、精度等)的应用,并分析了scanf()函数处理空白字符的特殊机制。文章通过实例展示了这些函数在程序与用户交互中的实际应用,为C语言初学者提供了完整的I/O操作指南。(149字)

2025-05-29 20:53:27 987

原创 C语言——算术运算符和算术表达式

本文介绍了C语言中基本算术运算符的使用规则,包括加减乘除和取模运算符的运算规则及注意事项。详细讲解了算术表达式的组成、运算符优先级和结合性,强调了不同运算符的计算顺序。同时说明了强制类型转换的使用方法及其特性,以及自增自减运算符的正确使用方式。最后介绍了赋值运算符的类型转换规则、复合赋值运算符的用法,以及逗号表达式的求值顺序和结果。全文系统性地阐述了C语言中各类运算符的基本特性和使用规范。

2025-05-28 20:58:27 724

原创 C语言——数据类型

本文系统介绍了C语言中的进制转换与数据类型存储原理。在进制转换部分,详细讲解了二进制、八进制、十进制和十六进制之间的相互转换方法,包括整数和小数的位权展开计算、快速转换技巧等。在数据类型存储部分,重点剖析了整型的补码存储机制、浮点型的IEEE754标准格式以及字符型的ASCII编码方式,并解释了内存地址、字节序等底层概念。通过理解这些基础原理,可以更深入地掌握变量赋值、类型转换等编程技术,为编写高效代码奠定基础。

2025-05-27 19:39:14 2167

原创 学习嵌入式第一天

嵌入式即嵌入式系统,IEEE(Institute of Electrical and Electronics Engineers,美国电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。

2025-05-26 20:17:44 845 1

空空如也

空空如也

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

TA关注的人

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