自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux学习-数据库

int (*callback)(void*,int,char**,char**), /* Callback function */回调函数只有找到该数据的时候才会调用,每次找到一个符合条件的数据,就会他调用一次。sqlite> insert into student values (1002, "王二", "女", 18, NULL);sqlite> insert into student values (1001, "张三", "男", 19, 80);

2024-04-15 19:27:35 937 1

原创 Linux学习-网络TCP

成功返回一个新的文件描述符(为了不影响继续和其他人进行链接通信,会返回一个新的套接字专门对这个连接的IP继续进行通讯)4.select只能工作在水平触发模式(低速模式),无法工作在边沿触发(高速模式)4.UDP是无连接的、TCP有连接的、UDP是以数据包形式传输、TCP是以流的方式传输。2.确认号:已经确认接收到的数据的编号(只有当ACK为1时,确认号才有用)1.select监听的集合中的文件描述符有上限限制。backlog:允许等待的尚未被处理的三次握手请求的最大个数。使用void *ptr。

2024-04-10 17:21:26 1152 1

原创 Linux学习-网络UDP

数据发出后,对方没有接收完整,返回ACK告知发送方自己接受多少数据,然后发送方会再次进行缺失数据的发送以保证数据完整。domain:使用的协议族 AF_INET (IPv4协议族) 还有其他协议组,可在手册中查看。是否收到数据也不知道。addrlen:目的地址的长度(就是dest_addrlen的大小)这是ipv4的协议结构体,要转换乘通用的要强制转化(struct sockaddr *)传长度指针,是因为当接受完了之后,该指针指向的值会改正真正结收的地址的大小。子网掩码是0的部分表示IP地址的主机位。

2024-04-08 09:18:32 747

原创 Linux回顾-指针、

int *a[5];因为a无括号所以意思就是int *型的a有五个,有指向int元素的五个指针。int (*a)[5] 因为a有括号所以意思就是a是指针类型,只想五个int元素的地址。a[n] == *(a+n) == *(p+n) == p[n](指针也可以这样用)指针数组内存的时字符串常量的地址,其字符串不可以改变,只能改变其存放的地址。定义一个指针变量p,p是指向一个int返回值且有2个int参数的函数的指针。定义一个数组a,有5个元素,每个元素为int *型,占40个字节空间。

2024-04-01 14:13:25 642

原创 Linux学习-线程

一个线程异常结束会导致进程异常结束,进程异常结束,该进程内所有线程任务均无法向下执行。线程:线程是一个轻量级的进程,位于进程空间内部,一个进程中可以创建多个线程。start_routine:线程要执行的函数的入口。进程空间是独立的,没有共享空间,通信实现比较复杂。retval:存放线程结束状态空间的首地址。线程独占栈空间,文本段、数据段和堆区与进程共享。进程没有共享空间,不存在资源竞争的问题。thread:存放线程ID空间首地址。一个进程异常不会影响其余进程空间。attr:线程属性空间首地址。

2024-03-25 21:51:56 737

原创 Linux学习-进程

父进程调用fork创建子进程,子进程拷贝父进程的文本段、数据段、系统数据段 ,除了内核不拷贝。进程的父进程先结束,此时该进程称为孤儿进程,被系统进程收养,进程再结束时,会被系统进程回收进程空间。一个进程在运行时,操作系统会为该进程分配 0 - 4G 虚拟内存空间,分为文本段、数据段、系统数据段。创建一个子进程,新创建的进程称为原来进程的子进程,原来的进程称为新进程的父进程。进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡。获得调用进程的PPID,获得父进程的PID。

2024-03-21 15:27:02 965

原创 Linux学习-获取操作

第二个判断文件信息的方法除了上述S_IFMT还有下面的S_ISREG的方式可以判断文件的类型。将pathname对应的文件信息放入statbuf中。通过文件名链接,所有能够看到的连接文件均为软连接文件。但是硬链接当文件删除后重新创建也不会链接,应为inode已经不一样了。软件链接通过文件名链接,当文件删除后,在进行创建就还可以来链接,通过文件对应的inode节点链接。pathname:文件路径字符串的首地址。statbuf:存放文件信息空间的首地址。pathname:链接文件的路径。

2024-03-20 16:06:31 663

原创 Linux学习-目录IO编程

rwx rwx rwx 第一组rwx是电脑使用者的权限 第二组时同组使用者 第三组时外部用户,0777会与上一个~0002(umask掩码)X_OK 检测是否拥有执行权限。R_OK 检测是否拥有读权限。W_OK 检测是否拥有写权限。检测调用函数的程序对文件是否拥有指定权限。F_OK 检测文件是否存在。从目录流中读取下一个目录项的结构体信息。r: 目录中是否能够查看文件。w: 目录中是否能够新建文件。录 name:目录文件路径。x: 目录是否能够进入。

2024-03-18 20:52:45 388

原创 Linux学习-文件IO编程

标准IO和文件IO的区别:1.标准IO是库函数,是对系统调用的封装2.文件IO是系统调用,是Linux内核中的函数接口3.标准IO是有缓存的4.文件IO是没有缓存的IO:bcd- 标准IO(只有-能用标准IO)lsp文件IO:1.操作步骤:打开 -> 读/写 -> 关闭。

2024-03-18 10:30:01 789

原创 Linux学习-标准IO编程

w 只写 文件不存在创建,文件存在将文件内容清空,只写打开。w+ 写读 文件不存在创建,文件存在将文件内容清空,写读打开。r+ 读写 文件不存在报错,文件存在读写打开。a 追加只写 文件不存在创建,文件存在追加只写打开。a+ 追加写读 文件不存在创建,文件存在追加写读打开。buf:指定缓存空间的首地址,(不缓存就无首地址,大小也就是零)

2024-03-15 22:00:15 778

原创 Linux学习-shell

4.DownLoad Form 选择 "Others" -> "China" -> "mirrors.aliyun.com"练习:一条shell命令,将/usr/include/stdio.h文件后200行中与extern相关的内容记录到file.txt文件中。3.在Ubuntu上方找到"Ubuntu Software" 右键选择"Software & Updates"tar -jcvf 压缩文件包名.tar.bz2 文件夹。tar -zcvf 压缩文件包名.tar.gz 文件夹。

2024-03-14 22:53:17 792

原创 Linux学习-c项目-俄罗斯方块

该起始序列称为控制序列引导符,通常由'\033['或'\e['代替。字体颜色m 字符串 \033[0m");\033[nA 光标上移n行。\033[nB 光标下移n行。raw 等于-ignbrk -brkint -ignpar -parmrk -inpck -istrip。

2024-03-14 10:59:21 888

原创 Linux学习-链表

数组:优点:数组空间连续(访问元素方便)缺点:1,数组空间连续,一些比较小的空间不能被使用2,使用效率很低,比如需要在数组中间插入一个元素,需要将后面的元素向下挪链表:优点:1,空间不需要连续;可将小的空间联系起来。同过把下一个元素的地址存入上一个元素的地址域中从而连接起来。2,插入元素也更方便,只需要改变地址域即可缺点:1,地址不连续,访问元素不方便2,需要存储数据域和地址域内存空间更大有头链表从第二个元素开始存数据,无头链表是从第一个元素开始存储数据。

2024-03-11 19:40:42 367

原创 Linux学习-内存管理

malloc申请的空间一定是连续的。由于频繁申请和释放导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间,因为该空间不连续,所以这样的空间就会被叫做内存碎片。堆区是自低向高,栈区是自高向低,栈区申请空间越多,他就向下扩展,最多8m,超过就会崩掉:。如果字符串a后面的\n被人为取消,printf就会一直向后打印导致内存溢出。2,一个空间只能被free一次,多次free程序会崩溃。程序中malloc的空间没有被释放,会造成内存空间泄漏。注意:1,free只能释放堆区空间。

2024-03-11 15:41:57 332

原创 Linux学习-共用体和枚举,位运算

函数的参数必须是指向要存储数据的内存位置的指针,即某个数据类型的指针。区别在于共用体所有的成员变量共享同一片空间,内存空间就是其最大数据类型所占内存的大小;2,枚举常量可以被赋值,下一个常量的值就是这个常量的加1,第一个默认为0。函数从标准输入中读取数据时,它需要知道数据将被存储在内存的哪个位置。如果给成员变量2的值,那么成员变量1的值就会被覆盖;1,枚举一般说明将来变量的值在给定的常量中选择其一作为他的值。在C语言中,变量是存储在内存中的,每个变量都有一个地址。是一个枚举类型的变量,而不是一个指针。

2024-03-09 15:00:53 344

原创 Linux学习-结构体

struct 结构体名数据类型1 成员变量1;数据类型2 成员变量2;数据类型3 成员变量3;说明:结构体中数据类型可以是基本数据类型和构造数据类型都可以;先定义才能再进行初始化;数据类型 变量名;数据类型:struct 结构体名;这两个才叫结构体的数据类型结构体指针:数据类型 结构体名 *变量名。

2024-03-08 22:20:19 370

原创 Linux学习-二级指针的使用

如下图为图2的代码说明,右边函数体中把字符串的首地址给了prmp中存的指针指向的空间,也就pret;所以当右边函数销毁时,pret仍然等于字符串。代码不会打印出hello world因为是值传递,而不是地址传递。是把空的指针pret传给了ptmp;ptmp会随函数结束被回收;如下图为图1的代码说明,右边函数体中只是把字符串的首地址给了ptmp,当函数体销毁的时候pret还是为NULL;当函数体内部想要修改函数外部指针变量值的时候需要使用二级指针。当函数体内部想要修改函数外部的值的时候需要使用指针地址。

2024-03-06 22:01:30 407

原创 Linux学习-函数指针和指针函数

字符串是char *型,代表的是字符串的第一个元素的地址。

2024-03-06 21:30:57 339

原创 Linux学习-const指针和void指针

eg:就是p只能指向a,但是可以改变a的值,数组的数组名就永远只能指向数组第一个元素。指针变量p的值不能改变,但可以利用指针变量p修改指向空间的值,一定要对指针初始化,eg:就是p既可以指向a也可以指向b,但是不能改a,b的值;指针变量p的值可以改变,但是不能利用指针修改指向空间的值。指针变量p的值不能改变,也不能利用*p改变指向空间中的值。高精度转向低精度需要强制类型转化,反向转换不需要。const修饰的是*p,4和5是等价的,const修饰p和*p,p保存只内存地址,void是空的。

2024-03-06 16:40:25 367

原创 Linux学习-二级指针

指针p存入num的地址,p是对p中存放的地址进行操作,*p是对p中存放地址所对应的数据进行操作。

2024-03-06 15:51:56 326

原创 Linux学习-指针与数组

int a[5]就是开辟20个字节连续的空间,地址是0x2000 类型就是int *访问下标为n的数组元素的方式:a[n] == *(a+n) == p[n]对数组指针取*,值不变,类型降级成为指向数组第一个元素的指针。定义一个指针变量,占八个字节空间,指针指向了一个int类型五个元素的数组,将来+1就会偏移20个字节。指针数组主要是用来操作字符串数组,通过将指针数组的每个元素存放字符串的首地址实现多个字符串的操作。定义一个数组,数组占四十个字节,每个元素为int *型,共五个指针。指针和二维数组的关系。

2024-03-06 09:48:07 983

原创 Linux学习-指针

int *p,*q;(指针变量没有进行初始化,是随机值,或指向已经被释放空间的指针叫做野指针)指针一定要初始化;初始赋值空指针,指向内存地址为0x0的指针: int *p = NULL;本质也是0,“\0”,(0X0)所有的指针变量都站8个字节,包括数组指针等不管类型直接访问:通过变量的变量名访问内存空间间接访问:通过变量在内存中的地址访问变量空间(有的变量没名字,或者是变量名访问不了)逗号表达式是从左向右依次执行,并将逗号最后一个参数作为结果随机数rand();

2024-03-04 20:22:55 336

原创 Linux学习-宏

主要是完成一个代码替换的功能,只是替换的功能,中间不进行任何数据计算的操作;能加括号就加括号,以免替换方式的时候计算出问题;

2024-03-04 11:06:08 348

原创 Linux学习-函数

一般写在main外面,函数类型 函数名 (数据类型1 形式参数1,数据类型2 形式参数2,..........)函数体;return 结果;函数类型:函数运行完的结果的类型int float double char void(表示没有返回值,不写return 0;也可以)函数类型不写默认为int类型,函数类型应该和返回值一直,不一致时以函数类型为主,最好是函数名很容易理解。

2024-03-04 10:46:20 877

原创 Linux学习-字符串数组和字符串

数据类型 数组名 [元素个数]注意:元素个数必须是常量或者常量表达式元素个数必须能够容纳下所有字符,包括\0字符型数组和字符串的区别:字符型数组可以存放字符,不一定包含\0,字符串末尾必须要有\0字符串以\0来结尾,但是还是不会丢掉后面的\0。

2024-03-01 15:29:46 936

原创 Linux学习-数组-二维数组

数组类型 数组名 [行数][列数]行数和列数只能是常量和常量表达式,不能是变量或者变量表达式1 2 34 5 6。

2024-03-01 10:07:13 367

原创 Linux学习-数组-一维数组

数据类型 数组名 [元素个数];注意:元素个数必须是常量或者常量表达式,不能是变量或者变量表达式,个数必须是确定的。

2024-02-29 22:36:56 406

原创 Linux学习-循环函数

2,continue:结束本次循环,不会影响后面的循环,一个循环中屏蔽掉几次循环可以使用。b是循环的条件,c每次循环后都执行,d循环体内部代码,后续不会再执行。只要表达式成立,就会一直循环,除非不满足表达式就会跳出循环。goto loopp;1,break:跳出一个循环或者switch结构。定义一个标号:loopp:(或者其他字母都可)注意:do,,,while()后面加;不与while()相等。无论表达式是否成立都会先执行一次。3,return:结束当前函数。}while(表达式);while(表达式)

2024-02-29 17:18:53 388

原创 linux学习-C语言流程控制

&(优先级高于||,相对于||可以当一个整体) 逻辑与 一假为假,全真为真。注意:里层switch结束之后不加break就会继续执行,一个break只能跳出一个switch。if可以脱离else单独使用,else不可以脱离if使用。if,else不加中括号,默认控制一句代码。括号>单目运算符>双目运算符>三目运算符>赋值运算符>逗号运算符>case 常量2 :语句块2;case 常量3 :语句块3;case 常量4 :语句块4;注意:if后必须加逻辑表达式,else后不能加。

2024-02-29 15:27:24 409

原创 Linux学习-常用的输入输出函数

字符型 大小写转换 ,直接加减去32字符数字转换整型数字 减去'0'字符零即可。

2024-02-28 22:28:56 376

原创 Linux学习-C语言-运算符

算术运算符:/:不能除0%:不能对浮点数操作++:自增与运算符 i++:先用再加 ++i:先加再用--:自减运算符常量,表达式不可以++,--,变量可以赋值运算符左值:允许放在赋值运算符左边的值,只有变量可以作为左值右值:允许放在赋值运算符右边的值,常量,变量,常量变量组成的表达式都可以是右值左值为浮点数类型,右值为整型,会扩展精度。左值为整数类型,右值为浮点数类型,会舍弃精度左右两边均为整型,会将右值直接拷贝到左值空间中去。(注意有无符号转换,符号位注意)

2024-02-28 16:31:59 545

原创 linux学习-C语言数据类型

强制类型转换:(int)3.213(直接舍去小数位);(只会转换一次,后面还用该是什么类型就是什么类型)eg:3.14-5=-1.86 int转为double。short 和char 在数据运算和处理的过程中会转换为int类型。float类型在数据运算和处理的过程中会转换为double类型。同种类型所占空间越大精度越高。表达式一定有值,有类型。所以不同类型的运算需要类型转化。无符号精度大于有符号精度。浮点型精度大于整数型。原则是:低精度转换为高精度。

2024-02-28 11:02:03 355

原创 Linux学习-C语言-变量和常量

表达式:由一个或多个运算符连接的变量和常量组成的式子。常量:在程序运行过程中值不会发生变化的是常量。变量:在程序运行过程中值可以发生变化的是变量。

2024-02-28 09:52:52 346

原创 linux学习-3-C语言数据类型 -3

变量:char 因为字符和整型的存储本质是一样的,所以unsigned char(0~255) ,signed char(-128~127)也可以。存储:将对应编码存进计算机->相当于存进一个无符号的整数。采取编码用二进制代替字符型:ASCII,GB2312。在c语言中所有的非0值为逻辑真值,0值为逻辑假值。void 搭配函数和指针使用。常量形式:'a'只能写一个。

2024-02-28 09:45:02 354

原创 linux学习-3-C语言数据类型 -2

0 | 2 +127 (加127为了防止是有负数,有偏移量加上负数还是正数)|1001(后面补0)因为小数是乘2取整法,所以有时只能无限接近与该小数,所以double存储的数据更多,所以精度就越高。如果是double 是一位符号位| 十一位指数位+1023 | 尾数位(53位)s2,将二进制形式的小数,写成科学计数法的形式。一位符号位| 八位指数位 | 尾数位(23位)整数也可以这样,加后缀说明 1l,1ll,1。s1,将小数转为二进制形式的小数。小数部分(乘2取整法)

2024-02-27 22:12:11 337

原创 linux学习-3-C语言数据类型 -1

不同类型的数据-----机器指令不同--导致最终使用硬件的部件不同#if 0#endif (用中间的一段代码,就写1不用就写0)基本的数据类型:1,整型: int,short ,long ,long long 大小不一浮点型:字符型:2,在程序运行的过程中值能被改变的量叫变量,不能被改变的量叫常量。

2024-02-27 21:24:39 799

原创 Linux学习-2代码编译

s4:shift加:低行模式 保存:w 保存退出:wq 强制保存::wq!shift+v 行选中配合方向键可以选中多行,然后按一下y货d就可以复制或删除多行。myy m表示数字,表示从光标所在行开始m行复制。mdd m表示数字,表示从光标所在行开始m行删除。:u 撤销 反撤销(撤销刚的撤销)ctrl+r。s2:按i案件(insert)插入状态(编辑)s3:按esc退出插入模式,回到命令模式。3.运行代码 --./a.out。1.编辑代码 --vim、vi。2.编译代码 --gcc。

2024-02-27 18:47:29 334

原创 linux学习-1基础命令

表示普通用户root/#表示超级用户:命令前加sudo进入超级权限linux的硬盘:/是根目录,是所有文件的起点命令操作,没有路径就是当前路径下操作 ,否则是指定目录操作绝对路径:从形式上看:/home/linux(只要是以斜杠开头的)相对路径形式上:含义上:参考起点不同,要是都在西安,那就从西安开始写,有人在国外就要从中国开始写。

2024-02-27 10:32:02 330

原创 freertos学习-普通链表

上述代码就是只创建一个链表组,链表组中就只有一个链表,一个链表中也只有一个人。将couple设置成下一个结构体的地址,就构成了一个简单的链表。只需要在结构体中增加结构体元素就可以完成一个复杂链表。如图所示,指针所指的都是地址,所以就只有四个字节。

2024-01-24 22:12:11 339 1

原创 freertos学习-中断机制

因为当中断后可能还会有中断所以会导致切换后的任务还没有运行,就会被又切换,会造成资源浪费。所以只需要在最后一个中断函数中选择Ture进行挑出优先级最高的任务运行即可。在执行中断的时候,优先级必须低于设定的最大优先级,而且最低的中断也可以打断所有优先级的任务。主要有如图的三个中断,其中用于调度和用于切换的中断一般优先级是设置最低的。当优先级高于某个值时,就不能用freertos内的API函数,因为当有非常紧急的事件发生当用自己的API函数更为稳定安全。1.任务可以等待,中断不能等待,越快越好。

2024-01-24 21:08:34 353 1

空空如也

空空如也

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

TA关注的人

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