自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 10.3 Linux_并发_创建守护进程

守护进程又叫精灵进程,是一个生存期较长的进程,通常并且某种任务或等待处理某些发生的事件。它是一个在的这使得守护进程不受终端的信息影响(比如ctrl c中断程序),同时守护进行也不能够向终端发送任何信息(标准输入、标准输出、标准错误被关闭)。创建子进程,父进程退出后,通过ps -elf | grep xxx 查询,发现父进程的进程号不是1问题如下图:原因:这是因为init有许多事情做,在init中创建了一个子进程专门用来收留孤儿进程。

2024-10-01 10:35:30 229

原创 10.2 Linux_并发_进程相关函数

返回值:失败返回-1,成功返回两次,子进程获得0(系统分配),父进程获得子进程的pid注意:fork创建子进程,实际上就是将父进程复制一遍作为子进程,但子进程只执行fork之后的代码,不执行fork之前的代码。这里的"复制"代表了父子进程的空间是独立的,互不影响。如果父进程先结束,那么子进程变成孤儿进程,最终被init进程收养,并且子进程变为后台进程。如果子进程先结束,但父进程没有回收子进程,那么子进程变成僵尸进程。

2024-10-01 09:07:33 615

原创 10.1 Linux_并发_进程基本知识

程序是存放在磁盘上的文件,是静态的。进程就是跑起来的程序,是动态的。它包括创建、调度、执行、消亡。是一个程序所分配资源的总称。进程控制块的作用是管理进程的属性,存放了进程表示PID、进程用户、进程状态、优先级、文件描述符表等信息。等待态:进程在等待一个事件的发生或某种系统资源。分为可中断和不可中断两种形式。停止态:进程被中止,收到信号后可继续运行。类似FreeRTOS中的挂起态。死亡态:已终止的进程,但pcb没有被释放。运行态:进程正在运行,或者准备运行。

2024-09-26 11:33:28 219

原创 9.5 Linux_I/O_静态库与动态库

库是一个二进制文件,包含的代码可用被程序调用。常见的库有标准C库、数学库、线程库。

2024-09-26 09:39:57 764

原创 9.4 Linux_I/O_访问目录、文件属性

返回值:成功返回指向打开的目录文件的结构体指针(流指针),失败返回NULLname:目录的路径fd:文件描述符返回值:成功返回0,失败返回EOFdirp:指向目录的流指针。

2024-09-25 18:39:04 385

原创 9.3 Linux_I/O_文件I/O相关函数

返回值:成功返回文件描述符,失败返回EOFpathname:文件路径flags:标志,其中O_RDONLY、O_WRONLY、O_RDWR三个互斥,其余可用 ' | ' 链接mode:表示文件的权限,是可读可写可执行,以八进制表示。实际权限 = mode & (~umask)

2024-09-24 15:14:40 593

原创 9.2 Linux_I/O_标准I/O相关函数

文件打开就是判断这个文件资源可不可以被占用,如果可以,就能够打开成功,否则打开失败文件关闭就是释放文件资源。

2024-09-24 11:42:44 822

原创 9.1 Linux_I/O_基本知识

尽管我们可以直接通过系统调用来实现功能,但每个操作系统提供的接口不一样,所以在移植到其他操作系统时,每次都需要重新编写代码实现同样的功能;而使用库函数后,因为库函数的接口是一样的,因此移植之后就不需要对代码进行修改(库函数是已经写好的代码)。行缓冲:当输入/输出中出现了换行符时,就把缓冲区中的数据发给磁盘,这时缓冲区不一定写满。系统调用就是操作系统给我们提供的接口,库函数是在系统调用之上封装的函数。无缓冲:直接与磁盘进行数据交互,直接写磁盘,直接读磁盘。标准I/O通过缓冲机制减少系统调用,实现更高的效率。

2024-09-21 10:54:12 394

原创 6.C_数据结构_查询_哈希表

哈希表的查询是通过计算的方式获取数据的地址,而不是依次比较。在哈希表中,有一个键值key,通过一些函数转换为哈希表的索引值。其中:这个函数被称为哈希函数、散列函数、杂凑函数,记为:H(key)直接地址法、平方取中法、叠加法、保留余数法、随机函数法保留除数法(质数除余法):其中:p

2024-09-20 21:59:18 1088

原创 5.C_数据结构_树

树中任何节点都可以有0个或多个直接后继节点,但最多只有一个直接前驱节点。根节点没有直接前驱节点,叶节点没有直接后继节点。二叉树是树的度数为2的有序树,即:一个父节点最多有2个子节点,且这两个节点是有顺序的。除此之外,子节点也没有指向父节点的指针。编号方法是从上到下,从左到右进行编号,规定根节点的编号为1。这种方法只适用于完全二叉树,如果是不完全二叉树需要添加虚节点构成完全二叉树,这会大大增加冗余的内存使用。假设总共有 n 个节点,当前节点的编号为 i。由下一章详细讲解。

2024-09-19 21:16:06 900

原创 4.C_数据结构_队列

队列是限定在两端进行插入操作和删除操作的线性表。具有先入先出(FIFO)的特点。

2024-09-15 19:22:13 1126

原创 3.C_数据结构_栈

栈又称堆栈,是限定在一段进行插入和删除操作的线性表。具有后进先出(LIFO)的特点。

2024-09-08 21:41:05 705

原创 3.门锁_STM32_矩阵按键设备实现

需求来源:门锁肯定是要输入密码,这个门锁提供了两个输入密码的方式:一个是蓝牙输入,一个是按键输入。对于按键输入,采用矩阵按键来实现。矩阵按键是为了模拟触摸屏的按键输入,后续如果项目结束前还有时间就更新为触摸屏按键输入。由于矩阵按键就是GPIO的控制,所以不进行芯片和设备的分层编写,控制写在同一个文件中,最终向应用层提供一个接口。将按键的引脚与GPIO引脚以宏定义的方式进行声明,这方便后续改变矩阵按键的接线。//矩阵键盘接线。

2024-09-07 15:29:32 1172

原创 1.C_数据结构_基本知识

数据即信息的载体,是能够输入到计算机中并且能够计算机识别、存储、处理的符号总称。这里的数据不一定是一个int型,也可能是一个语音、一个字符串或者其他的一些打包的内容。例如在数据库中有如下一条数据。对于整个一行的数据,我们称为这是一个数据元素。在代码中,数据元素以结构体形式存在。产品编号、名称、规格、出厂日期是字段。在代码中,这是结构体中的成员。

2024-09-07 11:40:16 457

原创 2.C_数据结构_线性表

线性表就是若干数据的一个线性序列。数学表达式:L:表名a0~an-1:数据元素n:表长,n>0是为非空表二元描述形式:D:数据元素D用 ai 表示,这个 i 范围是0~n-1R:关系用R表示,这个关系是,表示ai为ai+1的直接前驱,ai+1为ai的直接后继。:这符号称为有序对,xxx1是xxx2的直接前驱,xxx2是xxx1的直接后继。 xxx1和xxx2可以为一个或多个。

2024-09-07 11:35:14 1124

原创 2.门锁_STM32_舵机设备实现

门锁的开启和关闭,就是电机来控制。这里不进行实际门锁机械结构的设计,选择用舵机或者电机转动一定的角度,就代表门锁开启。

2024-09-04 19:35:20 1421

原创 1.门锁_STM32_用户功能

一个用户具有用户名、密码、绑定的手机这三种属性,将其定义为一个结构体进行管理。定义如下char* name;//用户名//正确密码//绑定手机号}Usr,*pUsr;在这个结构体中,规定了密码为6位,绑定的电话号码为11位。这个用户定义的框架是链表形式,之后将以链表的增删改查为基础对其进行管理。

2024-09-02 15:59:53 487

原创 8.Linux_Makefile

(变量名)、${变量名}这两种方式的含义是一样的如果想输出$符号,应该输入$$变量赋值有4个符号:=、+=、?=、:=、1、" = ":是最基本的赋值方式,与在文中位置无关,系统自动推导将最终的赋值作为该变量的值。2、" += ":追加赋值,旧值保持不变,将新值黏贴到旧值后面3、"?= ":当某变量前面已经定义赋值过,则不执行本次定义赋值,否则执行本次赋值4、" := ":是覆盖式赋值,假如某变量在前面已经定义赋值过,则将本次赋值作为最新的变量值格式:make <变量名>=<值>

2024-08-27 10:11:35 1082

原创 7.Linux_GCC与GDB

gcc可以不从-E开始执行,可以直接从汇编开始:gcc -c -o ,之后再进行链接。分文件处理指令:gcc -o -I 指令:gcc -o -D =2、查看代码内容:list,简写l。指令:gcc - E -o 指令:gcc -S -o 指令:gcc -c -o 指令:gcc -o

2024-08-25 15:08:21 1037

原创 16.C基础_内存管理

内存分为代码区、全局区、栈区、堆区。代码区和全局区在代码编译完之后就已经确定,栈区和堆区是在程序运行时进行开辟和释放的。整体内存分区框图如下:对于一个进程,它一共有4G的空间,其中0~3G为上述的4个区(用户空间)、3G~4G为内核空间。2.1 代码区代码区存放的是函数体的二进制代码,由操作系统进行管理,具有共享、只读的特征。即:存放的是我们自己写的代码通过编译后生成的cpu执行的。2.2 全局区全局区又叫全局静态区,存放的是全局区的,这代表全局区的数据会一直占用空间,也代表变量随时可以访问。

2024-08-24 16:25:27 466

原创 15.C基础_共用体、枚举

枚举类型的定义与结构体一样。成员需要用" , "隔开enum 枚举名{枚举成员列表在定义时,新的枚举的成员名不能与其他枚举的成员名有重复。

2024-08-24 14:14:18 683

原创 14.C基础_结构体

定义结构体时,需要注意最后的。

2024-08-22 21:43:16 738

原创 6.Linux_服务器搭建

nfs(Network File System)即网络文件系统,其基于UDP/IP使用nfs能够在不同计算机之间通过网络进行文件共享,能使使用者访问网络上其它计算机中的文件就像在访问自己的计算机一样。网络文件系统:文件系统不像/home那样存在于本机,而是存在于网络中像自己的文件系统一样访问:访问文件的指令、方法完全一样提供透明文件访问以及文件传输;容易扩充新的资源或软件,不需要改变现有的工作环境;高性能,可灵活配置。

2024-08-22 11:42:49 869

原创 5.Linux_Shell编程

传参:bash (参数用空格隔开)第一个参数:$0,值为shell脚本名第n个参数:$n,$(n)。n为多位数时用()。如:$1,$(10)总参数个数:$#。$0不进行总参数个数的统计全部传入的参数值:$@(全部参数当作一个整体)或者$*(每个参数分开是一个值)上一条指令执行的结果:$?(常用作test指令返回值的判断,$?值:test真返回0)当前进程的id号:$$补充:$@与$*的区别验证。

2024-08-21 17:42:43 1485

原创 4.Linux_Shell命令

重定向就是改变默认的标准输入/输出目标,重新定向到新的目标。

2024-08-20 11:12:17 1150

原创 1.Linux_常识

二进制软件包(deb):直接拿来用的可执行文件源码包(deb-src):功能实现的源码,需要编译生成可执行文件后才能使用使用 " file + 文件名 " 查看文件类型:命名规则:软件包名称_软件版本-修订版本_体系架构.deb如:sogoupinyin_4.0.1.2800_x86_64.debsogoupinyin:软件包名称4.0.1.2800:软件版本x86_64:体系架构.deb:软件包后缀。

2024-08-17 22:08:17 3043 1

原创 13.C基础_预处理

宏定义的本质就是原样替换,写什么值就替换成什么。形式:#define 名字 值1.1 定义不同宏用 " #define " 声明,const 常量用 " const + 数据类型 " 声明宏最后没用分号,const 常量声明需要用分号表示语句结束宏不需要用等号赋值,cosnt 常量需要用等号赋值1.2 处理阶段不同宏定义在预处理阶段进行文本替换,const 常量在程序运行时使用。1.3 存储方式不同宏定义是直接替换,不会分配内存,存储于程序的代码段中。const 常量需要进行内存分配。

2024-08-13 17:59:42 817

原创 12.C基础_字符串相关函数

返回值:dest的首地址dest:拷贝到的目标地址src:需要拷贝的原数据。

2024-08-11 19:44:20 580

原创 10.C基础_函数

含义:指针函数就是返回指针的函数定义:* (形参)注意点:返回的指针,指向的位置不能为栈空间,即:不能指向函数退出后被释放的空间位置。

2024-08-11 18:28:57 187

原创 11.C基础_调试语句

assert可以通过传入的布尔值判断正误,但它只用于调试Debug中,而不用于真正的错误处理。因为assert会终止程序运行。assert是一个宏,后面跟一个布尔值,如果为假,assert会终止程序,并打印断言失败的消息。2、使用#define NDEBUG禁用断言。

2024-08-11 18:28:39 166

原创 7.C_Demo_格式化打印当前时间

time函数是标准 C 库中的一个函数,用来获取自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数,这个时间点也被称为 Unix 时间戳或 Epoch 时间。返回值:time_t 通常为long型,可用 sizeof 查看内存大小。返回值单位为s,错误时返回-1result:用于存储时间值,单位为s。存储的值与返回值是同一个值,可以写NULL。

2024-08-11 18:12:19 248

原创 6.C_Demo 数组练习:删除字符串的空格

删除字符串的空格,需要一个指针point来遍历字符串,一个指针LinkPoint来指向需要添加值的地方。当第一次找到空格时,将该位置point赋值给LinkPoint。然后每找到一次非空格的值就赋给LinkPoint位置,之后LinkPoint向后移动一位,指向下一次非空格值的赋值位置。现在有一个字符串,编写一个函数能够删除字符串中的空格字符。

2024-08-10 15:02:43 206

原创 9.C基础_指针与数组

数组指针就是" 数组的指针 ",它是一个指向数组首地址的指针变量。

2024-08-07 15:05:46 920

原创 8.C基础_指针基础

形式:* = ;

2024-08-06 11:36:08 1318

原创 7.C基础_数组

形式: [行个数][列个数],如:int a[3][4];行可以省略、列不可以省略元素的个数 = 行数*列数。

2024-08-04 17:09:21 1228

原创 5.C_Demo_排序

依次比较相邻的两个元素,如果顺序错误就交换。这种方法,显然需要很多轮才能完成,每一轮只能排序一个最大值或最小值(第一层for),将全部的数据排序完成,需要很多轮(第二层for)。对于第一层for,就是遍历数组,然后比较大小,进行交换。对于第二层for,就是考虑需要比较多少次。功能:使用冒泡排序法进行排序array:数组首地址size:数组大小mode:排序模式,' U '代表升序排序,' D '代表降序排序打印调试代码。

2024-08-03 16:41:36 525 2

原创 4.C_Demo_数组正逆序交换

功能:将数组元素位置翻转,例如a[]={1,2,3},最终a[]={3,2,1}array:数组首地址。

2024-08-03 15:02:33 223

原创 3.C_Demo_最大公约数、最小公倍数

假设两个数字a和b,求两个数字相除的余数c=a%b,如果余数为0,则b为最大公约数。如果b不为零,a=b,b=c,继续循环计算。两个数的最小公倍数数等于两个数的乘积除以两个数的最大公约数。即:x,y的最小公倍数 min(公倍数)=x*y÷max(公约数)参数a,b:传入的两个数值,两个数都不能为0。参数a,b:传入的两个数值,不能全为0。返回值:0代表错误,正常返回最大公约数。返回值:0代表错误,正常返回最小公倍数。功能:求a,b最大公约数。功能:求a,b最小公倍数。

2024-08-03 11:47:07 332

原创 2.C_Demo_实现多位数分离

数据存储:将3存入buf[0],将2存入buf[1],将1存入buf[2],' \0 '存buf[3],即:低位存低位。传入所需要分离的多位数,比如说123。返回值:返回动态开辟数组的指针。调试代码,用于打印字符串数据。

2024-08-03 11:08:23 222

原创 1.C_Demo_ ^ 实现两数原地交换

(原a^原b)^原b。=原a^(原b^原b)=(原a^原a)^原b。a =原a^原b。

2024-08-03 11:01:00 232

5.C-Demo-排序

5.C-Demo-排序_快速排序

2024-09-20

6.C-数据结构-查询-哈希表

6.C_数据结构_查询_哈希表

2024-09-20

5.C-数据结构-二叉树

5.C_数据结构_二叉树

2024-09-19

4.C-数据结构-队列

4.C_数据结构_队列

2024-09-15

3.C-数据结构-栈源码

3.C-数据结构-栈源码

2024-09-08

3.门锁-STM32-矩阵按键设备实现

3.门锁-STM32-矩阵按键设备实现

2024-09-07

2.C-数据结构-线性表-线性表源码

2.C-数据结构-线性表-线性表源码

2024-09-07

2.C-数据结构-线性表-链表源码

2.C-数据结构-线性表-顺序表源码

2024-09-07

2.门锁-STM32-舵机设备实现

2.门锁-STM32-舵机设备实现

2024-09-04

1.门锁-STM32-用户功能

1.门锁-STM32-用户功能

2024-09-04

2.C-数据结构-线性表-顺序表源码

2.C-数据结构-线性表-顺序表源码

2024-08-30

分文件管理makefile文件

分文件管理makefile文件

2024-08-27

5.C基础-运算符-取余-实现多位数分离

5.C基础-运算符-取余-实现多位数分离

2024-07-30

空空如也

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

TA关注的人

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