自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 本地git操作

【代码】本地git操作。

2025-04-14 11:16:28 470

原创 git reset详解

到指定的提交,并可选择是否修改工作区和暂存区。⚠️ 注意:若提交已被推送到远程仓库,强制重置(修改会保留在工作目录,可重新编辑后提交。确保无需保留代码再使用,或提前。)后需谨慎操作,避免影响协作。

2025-04-14 10:56:46 386

原创 git使用

建议小步提交,避免大量代码一次性提交。拉取时若冲突,手动编辑文件。:会永久丢弃未提交的修改。目录(存储版本数据)

2025-04-14 10:36:13 262

原创 宏控的用法

/ 如果 CONFIG_FEATURE_X 被启用(=y 或 =m),则编译此代码。IS_ENABLED(CONFIG_USB) // 展开为 1(模块也算启用)#include <linux/kconfig.h> // 内核代码中已默认包含。// 假设 CONFIG_X 是通过 -DCONFIG_X=1 传递的编译选项。IS_ENABLED(CONFIG_NET) // 展开为 1。IS_ENABLED(CONFIG_DEBUG) // 展开为 0。// 未启用时的代码。

2025-04-10 15:25:48 517

原创 ARM基础知识点及简单汇编语法

RAM(随机存取存储器,Random Access Memory)**是一种计算机存储器,用于暂时存储当前正在使用的数据和指令。**ROM(只读存储器,Read-Only Memory)**是一种非易失性存储器,通常用于存储永久性数据,即使断电也能保持数据。CMOS(互补金属氧化物半导体,Complementary Metal-Oxide-Semiconductor)**是两种常见的数字电路技术。:NOR Flash的物理地址通常映射到处理器的启动地址(如。:将寄存器的值存储到内存。

2024-09-18 20:52:10 2519

原创 frame buffer的使用

Frame buffer 是一块连续的物理内存,用于保存屏幕上每个像素的颜色信息。每个像素的信息可以表示为不同的格式,如 RGB、BGR、ARGB 等,具体格式取决于系统的显示模式。Frame buffer 中的每个字节都对应于屏幕上的一个或多个像素。Linux 系统中的 Frame Buffer 通过内存映射机制(Memory-Mapped I/O)工作。函数将 frame buffer 的内存映射到用户空间,便于直接对其操作。等表示的是 Frame Buffer 设备文件,程序可以通过。

2024-09-10 20:30:20 513

原创 哈希表和时间复杂度

(Hash Table),它通过将键值映射到特定的数组索引,从而实现高效的查找、插入和删除操作。其核心思想是将数据直接存储到具有固定大小的数组中,通过哈希函数计算出每个数据的存储位置。主要特性:哈希函数用于将输入的键(通常是字符串或数字)转换为数组中的索引。理想的哈希函数应尽量避免不同的键映射到同一索引(称为冲突)。:负载因子是哈希表中存储的元素数量与哈希表大小的比值。当负载因子过大时,哈希表的性能会下降,通常通过(重新哈希)来解决。

2024-09-09 18:48:23 1464

原创 栈和队列的数据结构

使用链表实现栈和队列的操作,可以充分发挥链表动态分配内存的特性,避免数组实现中需要预定义大小的限制。也就是说,最后加入栈中的元素最先被移除。这样插入操作发生在队尾,删除操作发生在队头。即最先加入队列的元素最先被移除。作为栈的栈顶,实现入栈、出栈和查看栈顶的操作。的原则,因此我们可以使用单向链表的。的原则,因此使用链表实现时,可以让。

2024-09-06 23:47:38 1473

原创 内核链表及其操作

定义一个双向链表的节点结构,类似于内核中的list_head,包含两个指针,分别指向前驱节点和后继节点。此外,还可以嵌入一些实际的数据。// 定义链表节点结构// 前驱节点// 后继节点// 数据节点结构,包含数据和链表指针int data;// 嵌入链表指针扩展my_node结构体,包含更复杂的数据(如姓名、年龄和成绩)。// 链表节点结构// 复杂数据类型——学生信息int age;// 嵌入链表结构。

2024-09-06 00:29:11 1144

原创 单向链表,双向链表的操作

双向链表是一种链式数据结构,每个节点包含三个部分:数据域、指向前一个节点的指针(与单向链表相比,双向链表的优点在于可以在 O(1) 时间内访问前一个节点。初始化一个空的双向链表,通常用一个指向第一个节点的头指针。遍历并打印链表中的所有节点,从头到尾和从尾到头都可以进行。双向链表的删除操作可以是删除头节点、尾节点或任意节点。双向链表的插入操作可以在头部、尾部或中间位置进行。将链表反转,使每个节点的指针指向前一个节点。将新节点插入到链表的头部。将新节点插入到链表的尾部。删除链表中的某个指定节点。

2024-09-04 19:48:06 652

原创 数据结构---链表

有头链表是指在链表的最前面有一个特殊的节点,即头节点(head node)。头节点不存储实际的数据,它的作用是指向链表的第一个数据节点,或者作为链表的起点。无头链表是指链表没有头节点,第一个节点即是链表的第一个数据节点。链表的起点直接指向第一个数据节点,如果链表为空,则该指针为NULL。

2024-09-03 18:34:50 1575

原创 嵌入式数据库

SQLite3是一个轻量级的关系型数据库管理系统,它遵循ACID(原子性、一致性、隔离性和持久性)原则,广泛用于嵌入式系统和应用程序中。通常可以通过将表的位置互换来实现右联接的效果,即使用左联接并调换表的位置。交叉联接用于生成两个表之间的笛卡尔积,即每个表的每一行与另一个表的每一行进行组合。左联接返回左表中的所有记录,即使在右表中没有匹配的记录。如果右表中没有匹配的记录,则结果中右表的列将包含空值(NULL)。只有当两个表中的记录满足联接条件时,才会包含在结果中。关键字,按列的值从小到大排序。

2024-08-29 21:07:49 2528

原创 IO多路复用几种函数

poll()是另一种 I/O 多路复用机制,允许应用程序监视多个文件描述符,等待它们的状态发生变化。与select()不同,poll()使用一个数组来表示文件描述符。epoll()是 Linux 特有的 I/O 多路复用机制,设计用于高效处理大量文件描述符,尤其适合需要高性能的网络服务和其他 I/O 密集型应用。epoll提供了更好的扩展性和性能,尤其在处理大量文件描述符时优于select()和poll()

2024-08-28 20:49:57 1383

原创 TCP并发服务器多线程和多进程方式以及几种IO模型

应用程序可以在等待 I/O 完成的同时执行其他任务,需通过轮询(多次尝试)来检查 I/O 是否完成。信号驱动 I/O 模型中,应用程序发起 I/O 操作并继续执行其他任务,当数据准备好时,内核会通过信号通知应用程序。在异步 I/O 模型中,应用程序发起 I/O 操作并立即返回,I/O 操作由内核完成,操作完成后内核通过回调机制通知应用程序。在阻塞 I/O 模型中,当应用程序发起 I/O 操作时,整个进程会被阻塞,直到操作完成。在这个过程中,应用程序无法执行其他任务,必须等待 I/O 操作的完成。

2024-08-27 21:04:56 1432

原创 TCP的报文段结构与TCP编程的小工具

和。TCP首部是控制TCP连接和传输的重要部分,而数据部分则包含了实际要传输的应用层数据。

2024-08-23 20:18:42 1523

原创 UDP编程和TCP网络编程

【代码】UDP编程和TCP网络编程。

2024-08-22 21:18:39 1586

原创 IPC-共享内存-进程间通信方式 网络编程基本知识

共享内存是一种高效的 IPC 机制,允许不同进程共享同一块内存区域。

2024-08-22 00:24:19 1268

原创 有名管道,signal

用于设置特定信号的处理函数。当指定的信号发生时,操作系统会调用设定的处理函数。成功时返回实际读取的字节数,失败时返回 -1 并设置。成功时返回实际写入的字节数,失败时返回 -1 并设置。是要检查的信号的编号。是要删除的有名管道的路径。: 允许设置信号处理程序以及附加选项,如信号阻塞或修改信号处理的标志。返回值是旧的信号处理函数的指针。: 用于阻塞、解除阻塞或设置进程的信号屏蔽字。结构体的指针,用于指定新的信号处理行为,结构体的指针,用于保存旧的信号处理行为。: 用于判断信号是否属于指定的信号集。

2024-08-17 19:55:08 1034

原创 线程间的顺序执行(信息量)进程间的通信

信号量是一种用于进程间或线程间同步和互斥的机制。它的核心机制基于计数和操作,用来管理对共享资源的访问。1. **信号量的定义**: - 信号量是一个用于控制对共享资源访问的整数计数器。它能够记录可用资源的数量或进程/线程的等待状态。2. **操作**: - **P 操作(也称为 wait 操作)**: - 功能:申请资源或等待条件满足。 - 实现:将信号量的值减一。如果信号量的值小于零,则进程或线程将被阻塞,直到信号量的值大于零。 - **V 操作(也称为 signal

2024-08-16 19:52:49 1257

原创 线程资源回收和进程和线程的比较及互斥锁

资源回收线程与进程的比较互斥锁

2024-08-15 21:43:55 470

原创 进程的退出和线程的相关操作及函数

2024-08-14 19:40:32 423

原创 进程编程及其函数的使用

阻塞调用,直到子进程终止。它返回子进程的 PID,并将子进程的退出状态存储在一个整数中。函数用于正常终止进程并返回一个状态码给操作系统。状态码通常用来表示进程的退出状态。创建一个新进程(子进程),新进程几乎是父进程的完整拷贝。终止进程并产生核心转储(如果系统配置为生成核心转储)。系统调用来回收子进程的资源,并获取子进程的退出状态。函数用于非正常退出进程,通常是由于程序错误。进程终止后,父进程可以使用。

2024-08-13 20:20:16 684

原创 进程及多任务编程

进程是操作系统中用于执行程序的基本单位。一个进程在执行时拥有自己的地址空间、代码、数据和系统资源。程序代码定义:程序的指令集,是执行的核心部分。存储:代码通常被加载到内存中的只读区域,以防止被修改。数据段已初始化数据段定义:存储程序中已初始化的全局变量和静态变量。存储:这部分数据在程序加载时被初始化为指定的值。未初始化数据段(BSS段)定义:存储未初始化的全局变量和静态变量。初始化:在程序开始运行时,操作系统会将这部分数据初始化为零。堆定义。

2024-08-12 23:42:53 902

原创 文件操作常用函数及makefile的使用

定义变量:指定目标:默认目标:编译和链接:清理:自动变量:伪目标: 如 ,并不是实际生成的文件,而是用于执行某些命令的目标。模式规则: 通过通配符定义适用于多种文件的规则,如 。

2024-08-08 19:21:50 1088

原创 文件目录的相关操作

opendir。

2024-08-08 09:58:34 928

原创 缓冲区和文件IO--linux系统调用

打开一个文件或设备,并返回一个文件描述符,用于后续的读写操作。:改变文件描述符的文件偏移量,支持随机访问。:关闭一个文件描述符,释放相关资源。:从文件描述符中读取数据。:向文件描述符中写入数据。

2024-08-06 20:33:54 1079

原创 文件Io编程基础

个字符),包括换行符。返回值为字符串指针或。返回值为非负值(成功)或。:成功返回 0,失败返回 EOF。:读取一行字符(最多读取。

2024-08-05 20:05:20 1273

原创 Linux系统编程---shell脚本语法

第六列表示文件的最后修改时间。具体格式为。

2024-08-03 19:17:40 1040

原创 共用体、typedef、位运算

定义: 内存分配:访问成员:用途: 共用体 依次存储了整数、浮点数和字符串。最后访问的成员 ,覆盖了之前的值。 是 C 语言中的一个关键字,用于为现有的数据类型定义新的类型名称。它的主要目的是提高代码的可读性、可维护性和简化复杂类型的使用 是已经存在的类型,可以是基本数据类型(如 、)或复合类型(如结构体、共用体、指针等)。 是新的类型名,用户可以在代码中使用它来替代 。简化复杂类型的定义: 上述定义创建了一个新的类型 ,它表示一个指向以两个 作为参数、返回类型为

2024-08-02 20:25:20 1506

原创 结构体,链表

结构体是将不同类型的数据组合成一个单独的数据类型的方式。每个数据成员在结构体中都有自己的存储空间。struct 结构体名 {数据类型 成员1;数据类型 成员2;// 其他成员链表(Linked List)是一种常见的数据结构,由一系列节点组成,这些节点通过指针相互连接。链表在动态数据存储和灵活数据管理方面具有优势。

2024-08-01 20:17:48 935

原创 函数与指针、回调函数、二级指针

指针数组 (int *p[10]):数组指针 (int (*p)[10]):函数指针 (int (*pf)(int, int)):多级指针 (a = &p):多级指针的应用 (a + i -> ((a + i) + j)):函数指针的声明和初始化 (void (*pFunc)(void)):函数指针的声明与普通指针类似,只不过它指向的是函数。 是一个指向接受 参数且返回 类型的函数的指针。可以通过赋值将函数的地址赋给 。函数指针的初始化 (pFunc = (void(*)(void))函数地址):函数指

2024-07-31 19:21:44 856

原创 快速排序、const在数组指针的使用、动态内存分配

快速排序、const在数组指针的使用、动态内存分配。

2024-07-30 19:20:20 689

原创 指针的相关定义和运算

C 语言中,指针加 1 后,指针的值会增加一个步长,该步长取决于指针所指向的数据类型的大小。下面是详细解释及示例。是一个预定义的宏,表示空指针。空指针不指向任何有效内存地址,用于指针初始化和错误检查。会根据指针指向的数据类型移动指针。

2024-07-29 18:04:26 540

原创 多文件编译及其常用的命令

函数声明及部分指令C语言建立过程中的预处理过程预处理过程中的宏定义条件编译的使用及作用

2024-07-27 19:36:36 415

原创 标识符(变量名)的作用域与可见性以及命名规则

标识符(变量名)的作用域与可见性及命名规则变量的分类及其生存期

2024-07-27 19:28:46 389

原创 函数对各类数据传参特征

2024-07-26 22:45:08 619

原创 函数底层和递归调用

递归调用。

2024-07-26 08:20:15 667

原创 二维数组和函数结构

二维数组函数结构

2024-07-25 08:52:57 420

原创 二分查找法与字符数组

【代码】二分查找法与字符数组。

2024-07-23 19:03:51 251

原创 一维数组的定义及使用

2024-07-23 07:05:02 264

空空如也

空空如也

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

TA关注的人

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