自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ARM汇编指令

编译流程 main.c -> main.i 去注释,头文件展开,宏替换,特殊符号处理。ADRL 将基于PC或基于寄存器的地址值读取到寄存器中。LDR 将一个32位的立即数或者一个地址读取到寄存器中,大范围读取。main.i->main.s(汇编文件)main.s -> main.o(不可执行的二进制文件)main.o -> mainapp(可执行的二进制文件)或基于寄存器的地址值读取到寄存器中。

2024-09-03 21:13:41 390

原创 单向链表和双向链表的一些基本算法

判断是否有环:弗洛伊德快慢指针(快指针一般是慢指针的2倍,差为自然数增长)检测法,如果快指针在遍历过程中遇到了慢指针,则有环存在。链表环好处:1.链表环允许从某个节点开始无限循环访问,这在需要持续遍历数据的场景中非常有用,比如任务调度、游戏循环等。2.如果链表中有多个节点需要共享相同数据,使用环可以避免创建多个节点,节省内存。判断环入口:在相遇点,令慢指针回到头节点,然后两个指针以相同的速度移动,再次相遇点即为入口;反转原理:将头节点与后面的节点分开,然后从第一个节点开始对每个节点使用头插法。

2024-08-28 20:55:36 270

原创 数据结构 链表

1.链表可以动态的增加或者减少节点,而顺序表在一开始就定义了大小,扩展或缩小数组会涉及内存的重新分配,效率低下;2.插入和删除效率 链表更容易时间复杂度为O(1),顺序表需要整个移动大量资源时间复杂度为O(n);3.链表的内存可以是碎片化不连续的内存,而顺序表一定是需要连续的内存,会出现浪费行为。数据量增长与程序运行时间的比例关系以函数描述称为时间渐进复杂度函数,简称时间复杂度。3.链表空间不连续,使得理论上长度是无限的。2.链表需要更大的空间存放数据和节点地址。4.链表的插入和删除效率很高。

2024-08-28 16:00:28 432

原创 sqlite3

select grade.stuid as 学号, lesson.subject as 科目, grade.score as 成绩 from grade inner join lesson on grade.lessonid = lesson.id;sqlite> select grade.stuid as 学号, student.name as 姓名, lesson.subject as 科目, grade.score as 成绩。insert into 表名称 values(值1, 值2, ...);

2024-08-22 21:19:11 509

原创 20240821

select不再阻塞,同时select会将产生事件的文件描述符留在集合中,而把没有产生事件的文件描述符从。监听文件描述符集合,将所有要监听的事件加入集合中,使用select监听所有事件,当集合中有事件发生,将一个文件描述符设定为异步IO,当IO有事件发生时,内核会向用户层发送SIGIO信号提醒用户层处理事件。集合中踢出,所以留在集合中的文件描述即为产生事件的文件描述符,对其处理即可。功能:判断fd是否仍在文件描述符集合中。功能:将fd加入文件描述符集合中。功能:将文件描述符集合清0。

2024-08-21 09:15:31 290

原创 20240817

backlog:等待队列的大小(最多存放尚未被处理的三次握手请求的个数)addrlen:接收方的IP地址和端口号的大小。addr:存放发送方IP地址的空间首地址。sockfd:套接字文件描述符。addr:接收方的IP地址和端口号。sockfd:套接字文件描述符。sockfd:套接字文件描述符。sockfd:套接字文件描述符。buf:要发送的数据的首地址。sockfd:套接字文件描述符。len:接收数据的缓冲区的大小。len:要发送的数据的长度。2.UDP资源开销小,实现机制简单。向接收方发起连接请求。

2024-08-17 10:37:19 417

原创 20240816

子网掩码展开成二进制,1对应的部分就是IP地址的网络位,0对应的部分就是IP地址的主机位。子网掩码:每个IP地址都会搭配一个子网掩码,用来区分IP地址的网络位及主机位。私有地址:192.168.0.0 ~ 192.168.255.255。私有地址:10.0.0.0 ~ 10.255.255.255。

2024-08-16 10:38:03 246

原创 20240815

/SEM_UNDO 操作结束后,信号量的值会恢复到原来的值。//对信号量的操作 +1(释放信号量) -1(申请信号量)read.c 创建共享内存 -> 映射 -> 从共享内存中读取数据 -> 显示到终端。write.c 创建共享内存 -> 映射 -> 从终端接收数据写入共享内存中。recv.c 创建消息队列 -> 接收消息 -> 销毁消息队列。ipcrm -q/m/s 消息队列ID/共享内存ID/信号灯ID。IPC_CREAT:创建一个信号量数组。IPC_CREAT:创建一个消息队列。

2024-08-15 10:16:54 267

原创 20240812

自定义的函数的函数名(指向函数的指针)9号SIGKILL和19号信号SIGSTOP不能被忽略和捕捉。间隔seconds秒后给进程发送SIGALRM信号。SIG_IGN 忽略信号。handler:信号对应的处理方式。成功返回之前注册的信号的处理方式。signum:信号的编号。SIGCHLD:表示该进程有一个子进程结束了。SIGUSR1:用户可以使用该信号实现通信。成功返回上次定时剩余的秒数。seconds:间隔秒数。按照默认的方式处理信号。按照指定的方式处理信号。SIGKILL 进程结束。

2024-08-12 15:21:17 284

原创 20240808

2.不剥夺条件:不剥夺条件是指一个线程任务已经锁定了一个资源,不能被其他线程任务抢占,直到它使用完该资源。资源是有限的,在程序运行过程中,一段代码、一段空间、一个变量、CPU、内存都可以看做资源。资源数 == 0 申请操作会阻塞,直到资源数不为0,申请得到资源后继续向下执行。是一种资源,当一个线程任务加锁,其余线程任务无法再次加锁,直到解锁后才能加锁。3.请求和保持条件:如果没有拿到锁资源一直申请获得锁资源。如果打开锁了就一定要关闭锁。互斥锁不能同步,多个任务依然保持异步执行,但是可以解决资源竞争。

2024-08-09 00:39:06 349

原创 20240806 进程线程

写时拷贝:fork创建子进程,子进程拷贝父进程中的数据,如果只是读取时不会为子进程单独生成空间,只有做写入操作时,才会。父进程先结束,子进程成为孤儿进程,被init进程(1号)进程收养,子进程结束,init系统进程自动回收进程空间。如果子进程没结束,wait会阻塞直到子进程结束回收子进程空间。2.子进程结束,父进程回收子进程空间,子进程不会变成僵尸进程。1.让父进程先结束,子进程再结束,子进程不会变成僵尸进程。1.子进程任务结束,空间没有被回收,该进程成为僵尸进程。

2024-08-06 19:32:47 732

原创 20240802

删除链接文件名,并让硬链接个数-1 ,如果一个磁盘空间硬链接个数为0,需要回收磁盘空间。软连接文件名 -> inode -> 数据块 -> 链接向的文件名 -> inode -> 数据块。ln -s 要链接向的文件名 软链接文件名。pathname:目录文件的路径。创建一个newpath的硬链接文件。通过在磁盘中存放的inode节点进行链接。ln 要链接的文件名 硬链接文件名。oldpath:要链接的文件名。buf:存放软链接文件内容的缓冲区。newpath:硬链接文件名。pathname:链接文件名。

2024-08-02 18:45:31 311

原创 20240801

7.文件IO可以操作设备文件、进程间通信的文件、普通文件(Linux系统下的一切文件均可以使用文件IO)必须包含:O_RDONLY、O_WRONLY、O_RDWR 三个其中之一。文件描述符:很小的非负整数,而且新的文件描述符总是尚未被使用的最小的非负整数。写出标准IO中"r"、"r+"、"w"、"w+"、"a"、"a+"对应的文件IO的打开形式。相比较于文件IO 使用标准IO更加方便并且文件IO本身就是从标准IO里调用函数。O_CREAT 文件不存在创建。

2024-08-01 18:44:49 301

原创 20240731

ASCII码文件: '2' '0' '2' '4' 代码、文本文件。向流中写入nmemb个对象,每个对象size个字节,在ptr指向的空间中存放。从流中读取nmemb个对象,每个对象size个字节,在ptr指向的空间中存放。将score.csv中每个学生的成绩获得平均值逐行写入到avg.csv中。练习:利用fgets和fputs实现将一个文件中的内容拷贝到另一个文件中。s:用于存放读取到的字符串。ptr:写入数据空间的首地址。

2024-08-01 10:29:31 224

原创 20240730

w 只写 如果文件存在则清0,只写打开。2.char c 字符设备文件 按字符扫描设备信息的文件。1.block b 块设备文件 按块扫描设备信息的文件。5.link l 链接文件 指向其他文件的文件。如果文件不存在则创建。r 只读 如果文件存在则只读打开。r+ 读写 如果文件存在则读写打开。

2024-07-31 09:18:41 127

原创 20240727

申请一个新的链表节点 新链表的next指向旧的头节点的next的结点,头结点的next指向新链表的结点。头文件.h 里应该声明要使用存在的函数 也使得main函数在调用时展开后会直接明白该函数的存在。1.函数体内部的局部变量会随函数结束被回收,可以考虑存放到堆区空间中避免随函数结束回收。注意:操作指针时,注意指针指向的空间是否存在?4.单向链表、双向链表、内核链表、循环链表。如果成功,返回指向申请空间的指针。申请size个字节的堆区空间。申请的堆区空间没有被释放。2.数组的空间必须连续。

2024-07-29 09:10:49 266

原创 20240726

1.存放结构体成员变量,必须保证前面的长度为成员变量所占空间大小的整数倍。1.枚举常量第一个值默认为0,后面的枚举常量为前一个枚举常量的值+1。括号 > 单目 > 双目 > 三目 > 赋值 > 逗号。2.结构体整体的大小必须为最大类型长度的整数倍。算数 > 移位 > 关系 > 位运算 > 逻辑。2.枚举类型对应的变量的值应该为枚举常量中的值之一。1.小端:内存低地址存放低数据位称为内存小端。2.测试一个硬件平台是大端平台?不改变其余位的前提下,让第n位置1。不改变其余位的前提下,让第n位置0。

2024-07-26 20:10:19 224

原创 20240725函数指针和指针函数

char*、int*、double*转换为void时需要强制转换类型。void*转换为char*、int*、double*时不需要强制转换。2.指针数组的数组名是指向数组第一个元素的指针即二级指针。void*指标是类型地址,没有指向空间大小的含义。-> 结构体指针类型访问成员变量。. 结构体变量类型访问成员变量。1.函数体内修改函数体外指针变量的值。只要用于函数传参和返回值使用。指针数组传参二级指针和长度。二维数组传参数组指针和长度。函数指针:是指针,指针指向一个函数。指针函数:是函数,返回值是指针。

2024-07-26 00:04:39 320

原创 20240724

数组指针 int (*p)[5] 是指针变量,占8个字节,指向int类型的5个元素。2.指针数组的数组名是指向数组第一个元素的指针,即指向指针的指针也就是二级指针。2.数组指针取*操作:值不变,类型降级成为指向数组第一个元素的指针。1.函数体内想修改函数体外指针变量值的时候,传指针变量的地址即二级指针。数组的数组名是指向数组第一行所有元素的数组指针。2.指针数组的数组名是二级指针。二级指针里保存的是一级指针的地址。二级指针:指向指针变量的指针。

2024-07-24 19:09:06 177

原创 指针数组20240723

1.字符串在函数中传参时,只想让函数体内使用字符串,而不允许通过指针改变字符串的值使用const。const修饰p和*p, 指针变量p的值不能变,也不能利用*p改变指向空间中的值, 一定要对指针初始化。const修饰p, 指针变量p的值不能变, 但可以利用指针修改指向空间中的值, 一定要对指针初始化。const修饰*p, 指针变量p可以修改指向的空间,但不能利用该指针修改指向空间中的值。const int *p:只能修改地址,不能修改值。练习:从终端接收一个字符串,统计该字符串的长度(使用指针操作)

2024-07-23 20:39:30 308

原创 20240722

实参将地址传递给形参,形参是指向实参的指针,可以利用形参修改实参的值。也可以先将*p定义为空指针 再对p赋地址(int *p = NULL, p=&a.)实参将值传递给形参,形参是实参的副本,对形参改变不会影响实参的值。函数体内想修改函数体外部值的时候 使用地址传递。--:向内存低地址偏移指向数据类型大小个字节空间。(将a的地址赋值给p)*p : 获取p的值:变量a的地址的值300。&p:p的地址(p有自己的地址)取地址运算符:&(获得首地址)1表示打开接口 0表示关闭。p:p的值,也就是a的地址。

2024-07-22 18:49:33 215

原创 20240720

实参传递不会改变主函数里的值,只会改变函数里的值,因此想要修改函数里的值需要用地址传递。int fun(int array[],int len) 可操作不同类型长度的数组;* 数组传递中,形参和实参操作的是同一个数组。以 .h 结尾的: 头文件中存放宏定义。没有参数类型,返回值,传参的概念。头文件中存放声明的全局变量和全局函数。带参宏使代码体积曾大 函数不会。带参宏执行效率高 函数低。.c文件中存放.h函数的接口。1,函数定义时调用函数本身。字符串数组和字符串的传递。

2024-07-21 23:55:11 93

原创 20240719

声明一个变量或函数是在外部存储的,被声明函数应在另外的文件当中并且与主函数文件一起编译。3.在局部变量中使用时,使其在函数调用期间保持其值,不会因函数结束释放内存。优先存放到CPU内部的寄存器中,如 果寄存器存满了,等价于auto存放在栈区中。返回值一般是一个数,用来再主函数中调用,也可以不返回,凡是函数类型要用void。2.代码执行到变量定义时为变量开辟空间。访问:str[1][2] or str[0] str[1]函数类型 函数名(数据类型1 形参1,数据类型2 形参2)

2024-07-19 21:33:17 227

原创 20240718

输入与输出: gets(str) scanf("%s",str) printf("%s",str) puts(str)字符串的比较:strcmp(str1,str2) 同时遍历str1 str2遇见第一个不同的值对其ASCII码相减。字符串的拼接:strcat(str1,str2) 把字符串str2接到str1后面;字符串的拷贝:strcpy(str,"hello world")字符串长度:strlen(str) 从开头到 '0' 结束。输入输出用两层for循环嵌套。

2024-07-18 22:46:22 213

原创 20240717

printf("最大值为:%d,最大值下标为:%d",a[max],max)printf("最小值为:%d,最小值下标为:%d",a[min],min)goto: goto代码可以直接跳转,尽量不要使用,一般用于跳出系统错误。判断数组长度 sizeof(a)/sizeof( a[0] )数组的定义:int a[5] = {0};break:只能用于循环语句,用于跳出循环。continue:用于跳过某次循环。

2024-07-17 23:00:57 99

原创 20240716

case 常量3:语句块3;case 常量2:语句块2;嵌套switch中,里层switch结束才会执行外层,如果里层结束后没有break,则外层会继续执行;//switch中,如果没有break,则会顺序接着向下执行语句块,直到遇见break才会跳出。嵌套for循环:外层的for循环执行一次,里层的for循环执行一遍。case 常量1:语句块1;case 常量2:语句块2;case 常量3:语句块3;case 常量1:switch(整形2)while(逻辑表达式)switch(整形1)

2024-07-16 21:14:00 149

原创 20240515

2024-07-15 20:59:08 87

原创 20240713

# 打印八进制前的0和十六进制前的0x。%c 按照字符(ASCII码表)打印。占位符:%d用于整型 %f用于浮点型 %c用于char型。%x 按照无符号十六进制打印。%d 按照有符号十进制打印。%o 按照无符号八进制打印。%u 按照无符号十进制打印。%e 按照浮点数类型打印。%f 按照浮点数类型打印。%X 按照十六进制打印。%s 按照字符串打印。%p 按照指针打印。

2024-07-13 17:58:22 158

原创 20240712

8进制转2进制可以每一位变换成三位的二进制数,2进制转8进制可以每三位转为1位的8进制数,其余进制转二进制亦可如此。"32"='32'+'/0' 8进制数'\141'算一个字节。%d和%ld为占位符 sizeof(int)可以测量字节。八进制的一位对应二进制三位 十六进制的一位对应二进制的4位。系统取负数步骤:负数->原码->反码->补码(+1)->内存。其余进制转十进制:进制**位数*位数上的数 相加。0开头是8进制 0x开头是十六进制。宏标量只会用于替换,运算时注意带括号。

2024-07-12 17:44:12 82

原创 20240711

cp test1/file1.txt test2 将test1目录中的file1.txt拷贝到test2目录中 用到了当前路径。rmdir -rf dir1 . 强行删除目录?mv oldname newname 可用来修改文件名和移动文件。./a.out ./x 运行编译完成的文件。gcc -o x hello.c c语言编译。g++ -o x hello.cpp c++编译。sudo root 进入root用户 exit退出。

2024-07-11 17:52:52 85

空空如也

空空如也

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

TA关注的人

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