自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 framebuffer帧缓存

FrameBuffer,可以译作"帧缓冲",有时简称为 fbdrv。这是一种独立于硬件的抽象图形设备。是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。

2024-09-10 20:20:30 740

原创 树与哈希表

由n个节点组成的有限集有一个根节点;其他节点只有一个前驱节点,但可以有多个后继节点。(一对多)n = 0, 空树叶子节点(终端结点):只有前驱结点没有后继结点,非叶子节点(分支节点)结点度:子节点的个数称之为度树的(广)度:树中各节点度的最大值深度:从根节点到最底层节点的层数森林:n个互不相交的树的集合二叉树:任意一个节点的子节点个数不能超过2个(树的度为2),且子节点的位置不可更改。

2024-09-09 19:22:52 1129

原创 栈与队列的相关知识

2024-09-06 21:31:20 132

原创 数据结构---双向链表(内存泄露相关知识)

2. 垃圾回收机制失效:在一些使用垃圾回收机制的语言中(如Java、Python等),如果垃圾回收器未能及时回收无用的内存对象,也可能导致内存泄漏。1. 资源未被正确释放:程序中动态分配的内存(如使用malloc、new等函数分配的内存)在不再使用时,必须显式地释放(如使用free、delete等函数)。内存泄漏并非指内存在物理上的消失,而是指应用程序分配某段内存后,由于设计错误或疏忽,失去了对该段内存的控制,使得该内存无法被再次使用或回收,从而造成了内存的浪费。四、如何避免内存泄漏。

2024-09-04 21:06:33 898

原创 数据结构---单向链表

【代码】数据结构---链表。

2024-09-03 20:47:55 388

原创 sqlite3数据库

常用数据库1.关系型数据库:将复杂的数据结构简化为二维表格形式(大型:Oracle、DB2中型:MySql、SQLServer小型:Sqlite)2.非关系型数据库:以键值对存储,且结构不固定 (JSON、Redis、MongoDB)优势:1.开源免费, c语言开发2.代码量少,1万行左右,总大小10M以内3.文件型数据库,可以移动4.数据容量最大2T。

2024-08-29 21:02:19 2892

原创 IO多路复用

操作方式: 创建文件描述符添加文件描述符通知内核开始监测根据返回的结果做对应操作应用场景:1. 构建并发服务器,使用IO多路复用监测多个客户端套接字2. 使用io多路复用监测多个IO所对应的通信(如:网络、串口、can....)3. 在阻塞io中,进行超时监测。

2024-08-28 21:25:48 757

原创 TCP并发服务器

单循环服务器:同一时刻,只能处理一个客户端任务。并发服务器:同一时刻,处理多个客户端任务。

2024-08-27 20:43:28 543

原创 UDP服务端、TCP的c/s模式

socket bind //绑定 recvfromssize_t recvfrom(int sockfd, socket的fdvoid *buf, 保存数据的一块空间的地址size_t len, 这块空间的大小int flags, 0 默认的接收方式 --- 阻塞方式。

2024-08-22 20:10:22 1261

原创 IPC进程通信、网络

1.共享内存---最高效的进程间通信方式共享内存:是一块,内核预留的空间 ,最高效的通信方式 ,避免了用户空间 到 内核空间的数据拷贝。

2024-08-21 19:36:46 1080

原创 有名管道、信号

双工 ---发送和接收可以同时进行 --手机,电话半双工 ---发送端 和 接收端 同一个时刻之后有一个起效 ---对讲机单工 ---发送端 接收端固定 --- 广播。

2024-08-17 20:21:06 960

原创 信号量、进程间的通信

信号量(semaphore)是操作系统用来解决并发中的互斥和同步问题的一种方法。信号量 (个数) --- 反映的是资源的数量信号量的分类:信号无名量 ==》线程间通信有名信号量 ==》进程间通信1.信号量的定义 (为全局变量)sem_t semsem_t:信号量的类型,sem:信号量的变量例如: sem_t sem_w;2.信号量的初始化功能:将已经定义好的信号量赋值。参数:sem 要初始化的信号量,pshared = 0;表示线程间使用信号量,!=0;

2024-08-16 19:56:19 1403

原创 线程---锁

死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。当多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前进,这种情况就是死锁。很显然,如果没有外力的作用,那么死锁涉及到的各个进程都将永远处于封锁状态。

2024-08-15 20:53:40 562

原创 线程的了解

进程的产生 ----- fork线程 --- 轻量级的进程 进程 --- 重量级的进程线程 成为 CPU执行的最小单位 ,进程 成为 资源分配的基本单位线程 创建 和 调度 时空开销都比进程小线程组成:线程tid //thread ,程序计数器 ,寄存器集合,栈线程与进程的关系:线程 是 存在于 进程中的线程 共享了进程的资源 (代码段,数据段,打开一些文件,信号等)线程结束,不一定导致进程结束线程的编程 :类似与进程过程。

2024-08-14 20:01:23 877

原创 进程--二

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。

2024-08-13 20:26:30 1218

原创 进程的了解

进程:(进行中的程序)--正在运行的程序 (动态的) ---内存程序的一次执行过程进程是程序的一个实例进程是跑起来的程序,一个程序可以对应多个进程。程序----静态---硬盘 进程---动态---内存操作系统为了管理程序的动态运行过程----进程程序 = 代码(代码区) + 数据(栈区,堆区,字符串常量区,静态区)进程 = PCB(进程控制块) + 进程实体(text | data | bss | 堆区 | 栈区)

2024-08-12 21:08:15 892

原创 文件属性的获取

功能:根据用户id到/etc/passwd文件下解析获得结构体信息参数:uid:用户id返回值:成功返回id对应用户的信息,失败返回NULL。

2024-08-08 19:34:57 1184

原创 文件属性,目录

功能:获得一个文件流指针中的文件描述符参数:stream:文件流指针返回值:成功返回文件描述符,失败返回-1功能:将文件描述符转化为文件流指针参数:fd:已经打开的文件描述符和转之前的fd类型一致返回值:成功返回文件流指针,失败返回NULL。注:没有特殊要求关闭文件用调用度高的。read函数使用是将文件看作二进制,不含'\0',所以正常读的数据要比整体数据少一个,留一个位置放'\0',而fgets()函数自带'\0'。

2024-08-07 20:14:04 877

原创 缓冲区和文件IO

feof 检测文件是否到达结尾feof() 函数判断int feof(FILE *stream);功能:判断当前参数stream的文件流指针是否到达文件结尾。如果到达文件结尾则返回真,否则返回假。注意:该操作一定要在一次IO操作之后判断。参数:stream 要判断结尾的文件流对象返回值:成功到达结尾是 真 否则 是假ferror 检测一个流是否出错。

2024-08-06 20:46:23 2143

原创 标准IO(C库)

int age;}PER;;PER per;return 0;

2024-08-05 20:14:09 657

原创 shell脚本

shell脚本是一系列shell命令的集合。shell 命令解释器shell编程:解释型语言、边翻译边执行、擅长文件处理,操作系统管理、开发效率高 cp 1 2、执、效率低、移植性好C语言:编译型语言、先编译再执行、擅长数据计算和数据处理、开发效率低、执行效率高、移植性差。

2024-08-03 19:22:32 877

原创 共用体与位运算

声明新的类型名代替已有的类型名。//INT变为类型名intARRAY a;//表示数组。

2024-08-02 20:15:59 772

原创 结构体与链表

声明一个结构体类型:struct 结构体名. 结构体成员运算符 一级 自左向右-> 指向结构体成员运算符 一级 自左向右(*s). id s->id,看左边为指针还是变量,指针就可以写为s->id上面输出也可改为s->id, s->score, s->name结构体对齐原则1、结构体按照其最长成员大小对齐,意味着最终的大小必须是最长成员大小的整数倍;

2024-08-01 19:25:36 586

原创 数组指针、函数指针、指针数组和指向指针的指针(难点)

第二行的含义为指向一个长度为10一维整型数组。它的sizeof(p)为8。对于数组指针而言,如果指向为二维数组,它的p+ 1为表示到下一行。以下为二维数组求每一行的平均值。

2024-07-31 19:42:16 702

原创 深入了解指针

用指针*begin来表示数组的首元素地址。用指针*end代表数组最后一个元素的地址。用迭代器实现二分查找用迭代器实现选择排序。

2024-07-30 20:53:41 633

原创 指针基础内容

如果有一个数组a [ ] = {1,2,3,4,5,6,7,8,9,0},int *p = a,p = p + 1;执行完毕后p的地址为a[1]的地址,打印*p为a[1]的值2。倘若不是数组,进行p + 1 ,结果为在该地址向后偏移了sizeof(基类型)。如果传的是地址则可以进行修改,所以产生了指针的用法,一个变量的地址称为该变量的“指针”。6.函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型。由此,我们也可以用指针来写出数组的一系列的代码,如排序,二分查找等。基类型 * 指针变量名。

2024-07-29 18:19:08 432

原创 标识符的作用域与可见性、预处理命令

分为不带参数的宏定义和带参的宏定义。不带参的宏定义 带参数的宏定义#define 标识符 字符串 #define 宏名(参数表) 字符串在预处理阶段将宏名替换为具体数值。要加够括号防止出现错误。带参宏定义效率高于函数。宏定义后不加“;

2024-07-27 17:39:27 961

原创 数组作为函数参数

一维数组被调函数形参应为(int a [ ], int len);需要其他的再进行添加。三大排序主函数。

2024-07-26 19:17:33 258

原创 函数的调用

1.在定义函数中指定的形参,在未出现函数调用时,它们并不占用内存中的存储单元,只有在发生函数调用时,函数中的形参才会被分配内存单元。在调用结束后,形参所占的内存单元也会被释放。2.实参可以是常量、变量或表达式。在被定义的函数中,必须指定形参的类型,实参与形参的类型应当相同或赋值兼容。3.实参向形参的数据传递是“值传递”,单向传递,只能有实参传给形参。函数的形参相当于实参的复制,对形参进行修改不会对实参产生影响。解决办法为传地址。4.无法在被调函数中修改主调函数的参数。5.函数传参默认自右向左。

2024-07-25 18:55:24 1063

原创 二维数组与函数

二维数组定义一般形式为:类型说明符 数组名[常量表达式][常量表达式]例如 int a[3][4];表示为3(行)*4(列)的数组。二维数组元素的表示形式为:数组名 [下标][下标]数组名不可以整体赋值。以下代码为给二维数组进行赋值并打印出结果。求出二维数组的所有项之和。行数:rows = sizeof(a) / sizeof(a[0]);列数:cols = sizeof(a[0]) / sizeof(a[0][0]);上式三者都代表数组的首元素地址,三者值相等。

2024-07-24 18:57:01 449

原创 字符数组基础知识

用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。基本形式为: char s[100] = "Hello world!'\0'代表结束字符,不是一个可以显示的字符。如果一个字符串前面九个字符都不是(‘\0’),而第十个为‘\0’,则此字符的有效字符为9个。相当于此字符串在内存中占用了十个字节,最后一个字节‘\0’是系统自己加上的。在程序中往往用‘\0’来判断字符串是否结束。用printf()输出字符串时,它的输出项是字符数组名,而不是数组元素名。

2024-07-23 19:05:27 395

原创 一维数组基础内容

一维数组的定义方式为类型说明符 数组名 [常量表达式0例如:int a[10] 定义了一个整型数组,数组名为a,此数组有10个元素。说明:1.数组名的命名规则和变量名相同,遵循标识符命名规则。2.在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。3.用变量当元素个数时,不能进行初始化。4.数组的数组名代表数组中的首元素地址。例如: printf ("%p\n",&a[0]);和printf ("%p\n",a);二者相等。

2024-07-22 19:02:51 254

原创 循环控制语句

循环三要素:循环变量初始化语句、循环的执行条件、有时循环趋于结束的语句。

2024-07-20 17:32:48 1905

原创 选择结构程序

关系运算符有六种,分别为满足关系式则为真,不满足则为假。

2024-07-19 21:05:53 509

原创 输入与输出

1.给表达式后加上“;”变为语句。用“{}”把语句框起来变为复合语句2.所谓输入输出是以计算机主机为主体而言的。从计算机向外部输出设备(如显示器、打印机等)输出数据称为输出,从输入设备(如键盘、鼠标、扫描仪等)向计算机输入数据称为输入。

2024-07-18 20:06:58 299

原创 赋值运算符

int i = 10;初始化i = 10;赋值以下为一些基础运算符分为单目、双目、多目运算符,与其操作数有关,有几个操作数则是几目运算符。任何表达式都有数据类型,与打印结果类型相同。在运算编译过程中,编译器只做类型检查,在进行除法运算时,如果除数为零不报错,但是在运行过程中会出现错误。特说明求余(%):左右必须为整型或与整型相兼容,结果的正负与左操作数有关,与右无关。函数:long int random (void);类型 函数名 形参(返回值)(标识符)

2024-07-17 19:12:29 331

原创 三种数据类型

如果为有符号整型,首位为符号位,正负决定首位,0为正1为负,正数就写出其对应的原码,如果为负数,则将该数取绝对值,将该绝对值取反加一。阶码 8bit 将十进制数化为二进制,在变为科学计数法,得到其指数加127,该数的二进制为阶码。例:int i = 654321,先化为十六进制9FBF1,小端存储为:F1 FB 09 00。整型在内存中的实际存放情况,分为大端和小端,小端存储末尾对应小地址,大端末尾对应大地址。十进制:日常生活所用的,如123,1,202。

2024-07-16 18:44:33 638

原创 Linux基础指令

vim编辑器 进入为命令模式,按i可切换为插入模式,命令模式可进行复制(yy),粘贴(p),剪贴(dd),需要剪贴或复制几行则在其前加入对应的数字,按o可以插入空白行并转换到插入模式,O在前插入,o在后插入。cp 复制 复制在前,被复制在后 例如将a复制到b,cp a b,如果复制为文件夹,则需要在其后加上-r 表示将该目录下所有文件复制。bit---比特 byte----字节 1byte=8bit。绝对路径 包含有根目录信息的目录表示方法。

2024-07-15 18:57:58 394

空空如也

空空如也

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

TA关注的人

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