自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据库02 网页html01 day44

1、分类: 大型 中型 小型关系型数据库2、名词:DB 数据库DBMS 数据库管理系统MIS 管理信息系统OA 办公自动化GNU特点:1、开源 C语言开发2、代码量少 1万行左右,总大小10M以内3、绿色软件无需安装4、文件型数据库,可以移动。5、数据容量最大 2T:关系型数据库 非关系 :芒果建表dml新增 修改 删除一行查询查询select。

2025-07-29 19:59:00 219

原创 广播,数据库01 day43

1、分类: 大型 中型 小型。2、代码量少 1万行左右,总大小10M以内。:关系型数据库 非关系 :芒果。MIS 管理信息系统。4、文件型数据库,可以移动。OA 办公自动化。DBMS 数据库管理系统。新增 修改 删除一行。1、开源 C语言开发。5、数据容量最大 2T。3、绿色软件无需安装。

2025-07-28 20:54:14 274

原创 mqtt数据上传云端,且用线程缓冲邮箱 (项目) day42

【代码】mqtt数据上传云端,且用线程缓冲邮箱 (项目) day42。

2025-07-26 17:56:26 126

原创 TCP模型,mqtt协议01 day41

发布者发送数据(必须携带主题名)到服务器,服务器会查看自己订阅链表, 如果有订阅该主题的订阅者,就会转发数据。订阅者需要向服务器注册自己关心的主题名,服务器记录该主题被订阅,已经是那个客户端订阅的。不代表只能绑三个客户端,他中间有时间间断要去三次握手,第四个只是要等一会才能接受。适合嵌入式设备,移动设备,资源受限。3个端 :发布者,订阅者,broker(代理服务器)。订阅者也可以发布数据,发布者也可以订阅主题。的值不能正确的传递,发生错误,所以用。协议 : 消息队列遥测传输协议。只负责自己的部分,就和。

2025-07-25 19:24:43 373

原创 多路复用IO day40

​ 而CPU单核在同一时刻只能做一件事情,一种解决办法是对CPU进行时分复用(多个事件流将CPU切割成多个时间片,不同事件流的时间片交替进行)。在计算机系统中,我们用线程或者进程来表示一条执行流,通过不同的线程或进程在操作系统内部的调度,来做到对CPU处理的时分复用。应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标的输入、中断信号等等事件,再比如。创建的Rd_set,里面不仅有放进去的描述符,也会在描述符上 有标志位(0/1)时,是轮训的方式(以一个检测文件描述符) |

2025-07-24 20:23:58 575

原创 TCP day39

/阻塞接收客户端的数据。//阻塞接收客户端的数据。并获得通信套接字(服务器和客户端后续进行通信,用的套接字)如果要获取客户端信息,则事先定义变量并传入变量地址,函数执行完毕将会将客户端信息存储到该变量中。打开网络设备 获得文件描述符(套接字) listfd 监听套接字,作用,就是三次握手。发送的快,把对方的缓冲区填满就阻塞。发送的快,把对方的缓冲区填满就阻塞。.当收到对方的断开请求(0 == recv())。就断开与客户端的通信。功能:从已经监听到的队列中取出有效的客户端链接并接入到当前程序。

2025-07-22 20:46:31 715

原创 网络协议 day38

功能:如果该函数在服务器端调用,则表示将参数1相关的文件描述符文件与参数2 指定的接口地址关联, 用于从该接口接受数据。如果该函数在客户端调用,则表示要将数据从 参数1所在的描述符中取出并从参数2所在的接口设备上发送出去。功能:从msg所在的内存中获取长度为len的数据以flags。注意:如果是客户端,则该函数可以省略,由默认接口发送数据。返回值:成功 返回申请的套接字id, 失败 -1;之前通过socket函数创建的文件描述符,套接字id。返回值:成功 发送的字符长度, 失败 -1;

2025-07-22 11:02:11 322

原创 异步通信,共享内存 day37

key值(唯一键值) ==> 申请共享内存 ==》读写 ==》关闭 ==》卸载。功能:修改共享内存属性,也可以删除指定的共享内存对象。功能:定时由系统给当前进程发送信号, 也称为闹钟函数。Q:共享内存数据的存储方式是拷贝还是剪切?功能:进程暂停,不再继续执行,除非收到其他信号。返回值:成功 返回唯一键值, 失败 -1;===》任意文件,只要不会被删除重建即可。注意: 闹钟只有一个,定时只有一次有效,返回值:成功 返回映射的地址,一般等于。整形的数字,一般用ASCII码的。

2025-07-18 19:57:17 459

原创 进程间通信 day36

4.read 0 :写端关闭,读端读,读完内容之后还会向下读,如果管道没有内容,read 0;2.管道的数据容量:建议值: 512* 8 = 4k,实际值:65536byte= 64k。1,读端存在,一直向管道中去写,超过64k,写会阻塞。2,写端是存在的,读管道,如果管道为空的话,读会阻塞。1、无名管道 ===》管道的特例 ===>pipe函数。使用框架:创建管道 ==》读写管道 ==》关闭管道。结论:读写端必须同时存在,才能进行管道的读写。无名管道的读写:===》文件IO的读写方式。

2025-07-17 21:20:25 630

原创 线程同步,互斥 day35

功能:用指定的互斥锁开始加锁代码, 加锁后的代码到解锁部分的代码属于原子操作,在加锁期间其他进程/线程都不能操作该部分代码。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。框架:定义互斥锁 — >初始化锁 — >加锁 — >解锁 — >销毁。互斥机制 — >互斥锁 — >保证临界资源的访问控制。框架:信号量的定义 — >信号量的初始化 — >信号量的。没有资源(==0),则线程阻塞等待,一旦有资源。

2025-07-16 21:18:31 769

原创 线程回收 day34

优点: 比多进程节省资源,可以共享变量。概念:线程是轻量级进程,一般是一个进程中的多个任务。进程是系统中最小的资源分配单位.线程是系统中最小的执行单位都能并发完成任务,特征:1、共享资源2、效率高 30%3、三方库:pthreadcloneposix3.1 编写代码头文件:pthread.h3.2 编译代码加载库: -lpthreadlibrary缺点:1,线程和进程相比,稳定性,稍微差些2,线程的调试gdb,相对麻烦些。

2025-07-16 09:19:01 814

原创 进程exec,waitpid,回调函数等 day33

当进程调用一种exec函数时,该进程的。​ 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。​ 其实有六种以exec开头的函数,统称exec函数:但是功能都一样,参数不同。功能:该函数可以阻塞等待任意子进程退出,并回收该进程的状态。新进程,所以调用exec前后该进程的id并未改变。功能: 注册进程退出前执行的函数。僵尸进程:进程执行结束但空间(一般用于父进程回收子进程状态。如果要回收进程退出状态,则用。

2025-07-14 21:37:49 376

原创 进程基础概念,fork day32

PID 进程标识符当前工作路径 chdirumask 0002 进程打开的文件列表 文件IO中有提到信号相关设置 处理异步io,用户id,组id进程资源的上限ulimit - a, 显示资源上限。open files (-n) 1024 //文件默认开1023个stack size (kbytes, -s) 8192 //栈大小,默认8M(8kk)

2025-07-13 17:37:13 607

原创 文件IO day29

程序出错打印对应出错原因和用户输入字符串并退出。: 获得文件属性(主要是大小)返回值: 成功返回对应的错误信息。status:程序退出的状态。: 属性存放空间的首地址。要打印在终端上的出错信息。出错码对应的出错信息。

2025-07-07 20:30:33 178

原创 文件IO 01 day28

操作系统为了方便用户使用系统功能而对外提供的一组系统函数。称之为 系统调用 其中有个 文件IO一般都是对设备文件操作,当然也可以对普通文件进行操作。一个基于Linux内核的没有缓存的IO机制特性:.1 没有缓存区.2 操作对象不在是流,而是文件描述符 FILE* 4.3文件描述符很小的非负的整数int 0-1023操作系统最多开1k内核每打开一个文件就会获得一个文件 描述符​ 每个程序在启动的时候操作系统默认为其打开。

2025-07-04 17:07:49 863

原创 一些进程函数,小练习 day27

eg:硬链接:如果2号文件链接1号文件,如果一号文件删除,2号文件不受影响。​ 软连接:1号文件删除,2号文件不可访问。功能: 将一个老的路径名改为新的路径。功能: 删除一个文件(不能删目录)硬链接只能指文件,也不能跨文件介质。返回值: 成功返回0。软链接文件、符号链接文件(返回值: 成功返回0。功能: 创建一个硬链接文件。功能:把文件变大或者变小。:被链接向的文件的路径。功能:创建一个链接向。文件的新符号链接文件。返回值: 成功返回0。:创建的新硬链接文件。返回值: 成功返回0。

2025-07-03 19:25:42 309

原创 进程(起个开头,复习的一天)day26

返回值: 返回指向下一个标记的指针。如果没有更多的标记,则返回 NULL。

2025-07-02 20:20:03 141

原创 文件变成,fread/fwrite/ftell/seek,和缓冲区相关概念 day25

如果从文件的指定位置向后偏移过程中已经超过了文件的当前末尾位置,则会自动以’\0’来填充文件内容,从而形成一种被称为"空洞文件" 的特殊文件。参数:stream 要移动文件指针的目标文件流对象。功能:获取当前文件流指针的具体位置,一般以文件开头到当前指针的字节数为返回值。功能:将stream流文件中的文件指针从whence位置开始。offset 要在文件内偏移的距离,单位字节。参数:@s//存放读取到的数据对应的内存空间。返回值:成功 获取到的距离长度,单位是字节。参数: @s代表要输出的。

2025-07-01 21:31:25 390

原创 哈希表和LINUX系统编程(fopen/fgetc/fputc) day24

​ 采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表散列表查找步骤:是按照位置找的,通过找到数据的下标。​ 另一个问题是冲突:有两个关键字key1,key2,但是却有f(key1)=f(key2),这种现象我们称为冲突(collision),并把key1,key2称为这个散列函数的同义词(synonym)。定址方法:1.直接定址法,取关键字的某个线性函数值为散列地址。

2025-06-30 20:43:58 739

原创 队列,树 day23

队列是只允许在一段进行插入,而在另一端进行删除操作的线性表。允许插入的称谓队尾,允许删除的一端叫队头。​ 顺序队列。循环队列​ 常用操作,入队,出队。​ 先进先出,FIFOint tlen;int head;int tail;}SeqQueue;树:n(n>=0)个结点的有限集合。n = 0 ,空树。在任意一个非空树中,1,有且仅有一个特定的根结点2,当n>1 时,其余结点可分为m个互不相交的有限集合T1,T2,T3.。。。。Tm,其中每一个集合又是一个树,并且称谓子树。

2025-06-27 19:53:29 818

原创 单向链表02 双向链表,栈 day21,day22

1.线性表:零个或多个数据元素的有限序列线性表元素的个数n(n≥0)定义为线性表的长度,当n=0时,称为空表线性表的数据对象集合为,每个元素的类型均为DataType。其中,除第一个元素a外,每一个元素有且只有一个直接前驱元素,除了最后一个元素a,外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系​ 元素之间是有顺序了。如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。

2025-06-26 21:43:49 656

原创 顺序表整理和单项链表01 day20

1.线性表:零个或多个数据元素的有限序列线性表元素的个数n(n≥0)定义为线性表的长度,当n=0时,称为空表线性表的数据对象集合为,每个元素的类型均为DataType。其中,除第一个元素a外,每一个元素有且只有一个直接前驱元素,除了最后一个元素a,外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系​ 元素之间是有顺序了。如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。

2025-06-24 21:12:10 696

原创 数据结构顺序表 day19

1.线性表:零个或多个数据元素的有限序列​ 元素之间是有顺序了。如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。​ 当线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,为空表。在非空的表中每个元素都有一个确定的位置,如果a1是第一个元素,那么an就是第n个元素。

2025-06-23 20:14:50 590

原创 共用体,位运算 day18

1.语法enum 枚举类型名枚举常量名1,//逗号隔开枚举常量名2,....//枚举类型//枚举类型;是把一组相关的常量组合到一个类型中​ 常量的值本质上是一个整型的数值 ,从0开始,依次递增,也可以直接第一个元素赋值1,那就从1开始,如果指定了,后续的没指定的,是在指定的基础上依次递增枚举类型的变量 可以接受 任意整数因为枚举类型在c语言中,是以int类型来实现本质上就是整数型对结构体 定义int sno;int sex;}stu_s;

2025-06-20 09:10:27 219

原创 结构体02 共用体 day17

1.语法enum 枚举类型名枚举常量名1,//逗号隔开枚举常量名2,....//枚举类型//枚举类型;是把一组相关的常量组合到一个类型中​ 常量的值本质上是一个整型的数值 ,从0开始,依次递增,也可以直接第一个元素赋值1,那就从1开始,如果指定了,后续的没指定的,是在指定的基础上依次递增枚举类型的变量 可以接受 任意整数因为枚举类型在c语言中,是以int类型来实现本质上就是整数型对结构体 定义int sno;int sex;}stu_s;

2025-06-18 20:17:05 355

原创 二维数组 结构体01 day15,16

(a+l), 它们就成为指向列的指针,分别指向 a数组 0行 0 列 的元素和 1 行0列的元素。反之,在指向列的指针前面加&,就成为指向行的指针。(a+l), 它们就成为指向列的指针,分别指向 a数组 0行 0 列 的元素和 1 行0列的元素。反之,在指向列的指针前面加&,就成为指向行的指针。功能:将堆区空间释放 //将之前在用的空间交还给操作系统,告诉操作系统,说这块空间不用了,可以回收。结构体类型的形参,一般设计为指针类型,原因://指针类型传参时大小固定,//要求:代表堆区上的一块空间,

2025-06-17 20:48:35 258

原创 指针一维数组02 day14

​ step 1:找一个基准值 //数组的第一个元素作为基准值 //存放基准值的位置。​ //字符串在C语言中,是按照字符数组的方式处理(有`0’);形参:如果被调函数中做的只是读操作,没有修改操作此时,最好设计为这种形式。​ step 2:从右边开始找,找比基准值小的第一个值。​ step 6:将相遇位置上的值和基准位置上的值交换。​ step 7:对于比基准值小的一部分,继续快速排序。//表示s是只读的,不能被修改,s的指向不能二次更改。​ step 3:从左边开始找,比基准值大的第一个值。

2025-06-16 14:04:34 223

原创 指针01 day13

​ 语法: 基类型(1)(2) 指针变量名(3)​ (1):代表一个数据类型 //​ //表示p中指针指向的"内存空间上的数据类型​ (2):定义指针变量时,起到修饰(没有运算)作用 //代表当前定义的不是普通变量,而是一个指针类型的变量​ (3):标识符 //(符合标识符规则)int *p表示定义了一个指针类型的变量,p代表一个指针类型的变量,这个变量是要存放 指针类型的数据 (地址/内存单元编号)​//指向了a​ p的数据类型(去掉标识符剩下的就是其数据类型)?

2025-06-12 20:50:11 596

原创 标识符和预处理 day12

1.用一个指定的标识符子(即名字)来代表一个字符串#define 标识符 字符串#define 宏名 宏值说明:1.宏名-----自己定义一个标识符,符合标识符命名规则,一般建议写成大写与普通变量名区分​ 2.宏值-------表示宏名要代表的值,它本身只是一个文本字符串 (文本信息),与C语言中字符串常量不是一个概念文​ 3.预处理阶段------做的工作: 文本的原样替换用宏值替换宏名​ 4.宏定义 最后不写分号,除非需要。

2025-06-11 21:26:32 590

原创 函数02 day11

1.数组元素作为函数参数:因为数组元素本身就是一个 变量,所以函数的形参,设计为对应类型的一个变量即可实参,传递对应的数组元素即可。3.递归是一种特殊的循环 //递归因为栈空间有限,即使没有结束条件,也不会死循环。2.数组本身作为函数参数:数组传递,传的不是整个数组,而是首个数组元素的位置。​ 原因:因为字符型数组中主要存放字符串数据而字符串数据,本身有结束标志。​ 实参 二维数组数组名 二维数组行数。​ 形参 二维数组的形式 行数的形参。​ 形参 二维数组形式 行数的形参。

2025-06-10 20:07:58 373

原创 函数01 day10

3.栈 (内存) //栈本身是一种数据结构特点:先进后出FILO(First In Last Out)​ 栈–特点:先进先出 //局部变量—空间会开在栈上—变量特点:自动申请,自动释放。函数头 (1).类型说明符 //函数处理完数据后,结果的类型-----返回值类型。----运行之后–>加载到内容 //典型的c程序在内存上被划分了5个区域。​ (3).形式参数(形参) //用来接收要处理的数据。​ (2).函数名 //主要体现函数的功能。1.是借助于栈的结构,实现了函数的层层的嵌套调用。

2025-06-09 19:40:41 270

原创 二维数组 day09

字符串比较的规则与其他语言中的规则相同:对两个字符串自左至右逐个字符相比(按ASCII码值大小比较)函数头 (1).类型说明符 //函数处理完数据后,结果的类型-----返回值类型。​ 3.若出现不相同的字符,则以第一个不相同的字符的比较结果为准。​ (3).形式参数(形参) //用来接收要处理的数据。(2)如果字符串1>字符串2,则函数值为一个正整数。(3)如果字符串1<字符串2,则函数值为一个负整数。​ (2).函数名 //主要体现函数的功能。(1)如果字符串1=字符串2,则函数值为0。

2025-06-06 20:10:07 466

原创 插入排序,二分查找,字符数组 day8

​ 字符串都是按照字符数组的方式存储 //“hello”---->0 1 2 3 4 5,占六个内存空间,剩下部分补零。参数:s 要输出的字符 返回值:成功返回非负 失败返回-1。找到位置,用此位置的值与其前面位置的值比较,直到找到合适的位置。//参数:s要统计的字符串 返回值:返回字符串的长度值。主要用途:存放字符串数据 结束标志 // ‘\0’参数:s代表存放字符串的一块空间的地址 返回值:s。字符串长度:‘\0’ 前面字符的个数(不包括\0)要复制到的目标 返回值:成功返回。

2025-06-05 19:29:53 287

原创 数组1 day7

本质上就是当前位置与此后的所有位置上的数值比较,外层循环走完一趟,即此位置与其他位置的数值比较完成,定位这趟的最小值或最大值,此后的每一趟,之前定位的数值就可以不用比较,具体看升序还是降序,以此类推。//本质就是走一趟,在这一趟中两两比较(交叉向后),最后每一趟的最大值留在最后,此后循环一趟,但是由于上一趟最大值已经定位,所以这一趟的比较次数会减少一次,以此类推。//想要知道一个标识符对应的数据类型,去掉标识符,剩下就是它对应的数据类型。1.赋值问题(不能整体赋值) //能赋值的是数组中的单个元素。

2025-06-04 20:02:16 439

原创 switch-while day6

1.switch(整型表达式) //必须是整型,不能是浮点型​ case 后面是整型常量表达式,不能出现变量2.switch匹配执行,如果没有遇到break或者右} 则继续执行,直到遇到break或右}3.default:书写位置,可以自由安排,不一定在最后,注意是否配给break​ //default写错了,也能正常编译。

2025-06-03 19:28:07 279

原创 选择if day5

5.scanf(“空白符”) 空白符作用表示匹配任意多个空白符 进入了内存缓冲区(本质就是一块内存空间)6.scanf读取问题: a.遇到非法字符读取结束 2. %*d * 可以跳过一个字符 eg:%d%*d%d 读取第一和第三个字符 c.遇到空白符读取结束 c.遇到指定的宽度读到三列宽度后就结束。

2025-05-30 19:05:14 253

原创 输入输出相关问题 day4

​ 功能:格式化输出转换 参数:格式控制字符串(控制最终输出结果的格式) 输出列表(控制要输出的数据) …功能:将一个字符输出 参数@c 用来接收要输出字符的ASCII码值 返回值:成功时,将输出字符的ASCII码值返回。​ 占位符(%d,%c…)---------占位符的个数一般和后面输出列表的参数一一对应,要用对应的参数替换。​ m 控制输出结果的宽度 如果m>实际数据的宽度,输出m列的宽度(右对齐,补空格)​ .n 小数部分保留n位 .ns---------保留前n个字符。

2025-05-29 19:02:46 346

原创 数据类型(基本类型下半)day3

4.转义字符​\n换行\t跳下一个tab位置\b退格,当前位置移到前一列\r回车 将当前位置移到本行开头​\f换页 当前位置移到下页开头\\反斜杠字符\ddd1到3位八进制数\xhh1到2位十六进制所代表的字符0。

2025-05-28 19:59:54 882

原创 数据类型(基本类型)day2

4.字节序问题:0x12345678----小端—高高低低(高位数据放在高地址处) //高地址处指地址的名字大—eg:0x1004比0x1001大,所以0x1004是高地址处 高位数据–eg:0x12345678,在其中12是高位数据,78是低位数据。遇到此情况就发生”溢出”。​ 0.125 * 2 = 0.25 -----0 / 025 * 2 = 0.5 -----0 / 0.5 * 2 = 1.0--------1 小数部分:0.001(乘2取整法)

2025-05-27 18:52:10 590

原创 嵌入式学习(基本操作)day1

1.凡是 / 开头的, 统统认为都是绝对路径​ 含义:参考起点是根目录2.凡是不以 / 开头的,统统认为都是相对路径​ 含义:参考起点是当前位置。

2025-05-26 19:06:02 789

空空如也

空空如也

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

TA关注的人

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