自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 死锁/预防死锁

不同线程访问共享多个资源时按照相同的顺序访问,即线程一和线程二都按照A、B的顺序逐个访问。破坏上述四个条件任一即可,通常使用资源有序分配法;即破坏环路等待条件。锁用于对共享资源的排他性访问。同时只能被一个线程占用。

2024-12-03 18:50:31 214

原创 GDB调试

GDB是Linux下的调试工具,于GCC共同构成了完整的开发环境。

2024-11-30 19:33:23 442

原创 IPC及对应接口

管道(无名管道、有名管道)、消息队列、共享内存、套接字、信号量、信号管道分为无名管道(pipe)和有名管道(fifo),均为半双工。

2024-11-30 17:51:26 511

原创 关键字、指针

修饰变量属性为只读,不能被直接赋值修改,可以通过指针强制修改。声明一个外部全局变量或函数,可在本文件使用。延长局部变量生命周期,到整个程序结束。只被初始化一次,不初始化默认值为0。基类型是函数的指针/指针指向函数。修饰函数表示返回值不能被修改。:从定义位置到文件结束。

2024-11-04 15:43:10 232

原创 Linux 软链接 硬链接

理解软硬链接的前提需要理解文件的存储方式。简单理解为每个文件指向对应的inode(索引节点),通过索引可以在存储器不同位置找到属于文件的数据。链接文件使用与被链接文件相同的inode,多个文件指向同一个索引节点,即开辟了多个入口。链接文件是一个文本文件,保存被链接文件的路径用来访问被链接文件。当被链接文件被删除时,符号链接为无效链接。只有所有硬链接被删除时文件内容才被释放,利用这个特点可以理解为硬链接可以防误删。【硬链接】-- 多个文件使用同一个inode索引。【软链接/符号链接】-- 保存目标的路径。

2024-11-02 20:25:35 224

原创 进程知识点

一个时间片结束,当前执行的进程被挂起,PCB被从内存中拷贝至硬盘暂存,另一个进程PCB被拷贝至内存中,并在下一个时间片中执行,以此循环,直到进程结束,不再执行。根据单CPU特点,由操作系统对资源进行调度,同一时间只能只能一条进程,但得益于CPU计算的高速,一小段时间可以执行多条进程,从宏观上可以理解为并发。调用时fork函数会直接读取当前进程的PID,来确定创建的进程(子进程)与当前进程(父进程)的关系。fork函数创建了一个与父进程密切相关的子进程,此时两个进程同时存在,但具体代码在同一片空间中,因此。

2024-08-19 22:11:02 327

原创 标准IO(文件流指针)二

【代码】20240813嵌入式学习笔记。

2024-08-13 20:43:31 188

原创 结构体总结

需要使用结构体指针指向具体成员时,使用" . " 运算,需要使用成员内容时,使用" -> "运算。结构体的数据输入和访问一般通过指针来操作。为方便运算,使用指向结构体成员运算符“ -> ”用于描述复杂数据的一种数据类型。成员列表:用来描述复杂数据中用到的的成员变量,多成员间用分号隔开。使用方法:结构体变量名 . 成员名。表示访问结构体的成员。struct:关键字,表示在构造一个结构体的类型。结构体名:一个名称,用来描述结构体这个类型。根据各个成员变量类型和顺序,依次初始化。结构体成员运算符:“ . ”

2024-08-13 16:47:29 296

原创 标准IO(文件流指针)一

【代码】20240812嵌入式学习笔记。

2024-08-12 21:04:16 177

原创 数组/指针(字符型、整型)/指针数组/回调函数

比如在对字符串进行比较时,参与比较的是字符串,但在strcmp函数中的是字符串的地址,即指针数组中的元素;在对字符串进行交换时,交换的也是字符串的地址,而不是字符串本身。定义一个数组,其中存放的是保存在常量区(静态区)的字符串的地址。函数的标识符,即函数名就是函数的地址。数组的标识符p即为数组的首地址,通过对首地址进行偏移,可以得到数组中的元素;如果对只进行一次“星运算”,得到的结果是行的首地址,对行首地址继续进行“星运算”才能得到具体的某一个元素。数组中存放的是数据,指针数组中存放的是数据的地址。

2024-08-08 20:47:22 528

原创 指针/应用

数组定义后首地址为一个常量,但指针是一个变量,可以自加自减运算。指针的一大作用为通过间接访问对变量进行修改,利用这一特性可以弥补函数数值传递时无法修改函数外变量值的不足。指针类型标识符前加一个星号,表示标识符到表达数据类型为指针类型。但传入的是地址,在被调函数中经过*运算间接访问才能修改变量的值。指针加减一个数表示跳过了几个基类型,只能对常量或同类型指针进行做差,但对同类型指针不能用加法、乘法、除法。指针变量中存放的数据为地址,在赋值时要对变量取地址后将地址赋值给指针变量。一.通过指针迭代打印数组元素。

2024-08-06 19:35:22 305

原创 编译流程/指针

宏的语法为 "#define 标识符 字符串"。//宏定义一般将宏名大写,用以区分常规变量。预处理实质是将字符串以外的宏名用宏值进行原样替换。#undef:取消宏定义,用于结束宏生命周期,只有在作用域#define和#undef之间的宏名才会被原样替换。int r = 4;//定义一个宏用来表示圆周率,可以供不同运算使用带有参数的宏,实质上依然为原样替换。语法为 ”#define 宏名(参数) 宏值“//带参宏定义。

2024-08-05 21:48:30 1869

原创 函数/递归/数组实参

可以想象a在sum函数中将会不断减小,直到为1,此时才有了确定的值“sum(1) + 1”,作为确定值,他的上一层“sum(2) + 2“也才成为确定值,最终一层一层向上返回确定值,最终回归到开始的第一层”sum(a) + a“,将其作为返回值传递给主函数。main函数是程序的入口,只能在在主函数中调用其他函数,但主函数不能被调用。y“,表示向函数传递地址,函数接收到地址后的操作直接在原数组的内存空间上进行操作,相比传递值的方式,址传递的方式效率更高,但更加复杂。堆:手动申请,手动释放的大空间。

2024-08-02 21:28:01 373

原创 字符串练习/函数

定义函数的位置可以在main函数之前,也可以在main函数之后。如果在main函数之后定义,需要在main函数前对函数进行声明。在标准C语言中不支持将函数写在main函数中的写法。代码示例:求和函数。

2024-08-01 21:23:24 388

原创 字符串/字符串操作函数

字符串可以理解为字符数组,但在结尾有特殊的' \0 '结束符,表示字符串的结束。字符串的长度指结束符' \0 '之前的字符的个数,不包含结束符的长度。dest表示目标字符串,src表示源字符串。可以将字符串拼接到目标字符串,也可以将字符串常量拼接到字符串。用于从键盘上获取字符串,但输入超过字符串空间时会发生越界,对相邻空间进行写数据,且编译时不会报错,不推荐使用。dest表示目标字符串,src表示源字符串,函数表示将src字符串复制到dest字符串。str表示字符串的标识符,函数返回值为字符串的长度。

2024-07-31 21:28:36 335

原创 排序算法/二分查找

取出第三低位数,判断次低位数据是否大于第三低位数据,如果大于则将次低位数右移一位到第三低位,此时原先第三低位数变为次低位数,此时判断最低位数是否大于次低位数,如果大于则将最低位数右移一位到次低位,此时原先次低位数变为最低位数。冒泡排序的思路为,确定最大值:取出第一个数据,向右与下一位相邻数据进行比较,通过交换将其中较大的值放置在高位,将其中较大的值与向右下一位相邻数据进行比较,通过交换将其中较大的值放置在高位,以此循环,直到与最高一位比较完。是用二分法进行查找的前提为数据为有序排列,否则二分法将无意义。

2024-07-30 21:36:23 1038

原创 循环控制语句

C语言中整个程序的流程分为三个结构:顺序结构、分支结构、循环结构。

2024-07-29 20:10:25 407

原创 流程控制/关系、逻辑运算/选择语句

0 < a 的大小关系成立,逻辑值为真,即 1 ,所以表达式看作 0 < 1 ,大小关系不成立,逻辑值为假,所以最后的输出值为 0。但需要注意的是,条件运算的优先级高于赋值运算,因此在表达式2和表达式3中进行赋值操作时,会出现结合错差。下列代码中加法运算优先级高于关系运算,先由加法运算符进行结合: c = ( 1 + a ) >= b ,c = 2 >= 2 ,c = 1。但在或运算中,只需要一个值就可以得出整个表达式的值,因此,第一个值为逻辑真时,直接得出结果为真,或运算符右边的表达式不经过计算。

2024-07-28 18:37:37 797

原创 Vim补充/输入输出格式

对于整型变量有多种占位符可供使用:%d(转换为有符号十进制形式)、%u(转换为无符号十进形式)、%o(转换为八进制形式)、%x(转换为十六进制形式)、%X(转换为大写十六进制形式)。%f(float类型)、%lf(double类型)、%Lf(long double类型)、%ld(long类型)、%lld(long long 类型)。对于浮点型变量占位符有三种形式:%f(转换为十进制小数形式,默认保留六位小数)、%e(转换为科学计数法形式)、%g(转换为简洁形式,省略无意义的零)。%#o将内容转换为八进制。

2024-07-26 21:15:05 1980

原创 转义字符/运算符/(隐式)类型转换

i++:自加之前,在内存空间中开辟一片新空间,用于存放自加后的值,但此时如果调用i的值,得到的仍为原值;只有当完整运算过程结束后,新空间中的值才会赋给原空间中的值,赋值结束后,新空间中的内容被释放。在n前添加一个反斜杠' \ ',组成新的字符' \n ',这种用反斜杠和字符组成的新字符我们称之为转义字符,在代码中有特殊的用途。为了遵循“高内聚,低耦合”的原则,编程前可以通过绘制流程图的方式来整理思路,明确每一步操作的内容,避免不同层次之间的操作出现交叉。赋值运算的结果就是被赋值的变量的值;

2024-07-25 21:12:19 1558

原创 Vim命令/进制转换/数据类型

命令模式下输入命令“YY”,可对光标下一行内容进行复制,在命令前加入数字N,则可以复制N行内容;输入命令“P”可以将复制过的内容粘贴至光标下一行。同样的,在“P”命令前加入数字M ,可以将以复制内容粘贴M次;在命令模式下输入“SHIFT + V“,可以进入【visual block】模式,即块模式,。在该模式下可以通过方向键,以光标所在行为初始行,以行为单位进行选中。选中后可以通过”Y“ + M”P“命令进行复制粘贴。

2024-07-24 20:53:46 1056

原创 VMWare操作/Linux命令

Unix可追溯至通用电气、贝尔实验室与麻省理工共创的multics项目,此项目旨在开发一个交互式操作系统,但各方面受限,最终项目草草收场,由贝尔实验室接手,最终开发为Unix系统,并不断流传开来。默认命令模式,按“i”进入编辑模式,完成编辑后按“esc”退出编辑模式,重回命令模式,输入“:”进入底行模式,输入wq保存并退出。默认在当前目录下创建,也可指定目录创建,可一次创建多个目录,用空格分隔开,可创建多级目录。拓展:ls -a 查看目录下所有文件,包含隐藏文件。mkdir 目录名1 目录名2 目录名3。

2024-07-23 19:42:11 531

空空如也

空空如也

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

TA关注的人

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