自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 无名管道、有名管道、信号、信号处理

进程间通信(IPC)是指在不同进程之间交换数据或信息的机制。消息队列允许一个或多个进程向队列中写入消息,同时允许一个或多个进程读取这些消息。提供高效的进程间通信,但需要同步机制(如互斥锁)来避免数据竞争。只能用于具有亲缘关系的进程间通信(如父子进程)。提供一种在不同主机上的进程之间进行通信的机制。提供一种同步机制,用于控制对共享资源的访问。(20):挂起进程(如 Ctrl+Z)。(2):中断信号(如 Ctrl+C)。(3):退出信号(如 Ctrl+\)。提供高效的进程间通信,但需要同步机制。

2025-02-24 19:42:21 916 1

原创 线程的分离属性、互斥锁、信号量

具有阻塞功能,线程不结束,会一直等待线程结束,回收线程空间后再继续执行。如果资源数为 0,再次申请将会阻塞等待,直到有资源才会继续执行。为防止多线程操作全局变量导致的资源竞争,需要引入互斥锁的概念。:存在一个循环等待链,每个线程都在等待下一个线程持有的资源。避免死锁的方法:保持一致的加锁顺序,使用非阻塞加锁。功能:申请信号量资源(资源数 - 1)。功能:释放信号量资源(资源数 + 1)。线程的分离属性决定了线程结束时的行为。:线程已经持有资源,但又请求新的资源。):线程结束后,操作系统自动回收资源。

2025-02-23 23:27:29 1622

原创 进程&线程的创建、退出、回收

子进程已经结束,但父进程尚未读取子进程的状态信息时,子进程的状态信息仍然保留在系统中。线程位于进程空间内部,共享进程的文本段、数据段和堆区。:要回收的子进程的 PID(-1 表示任意子进程)。:文本段、数据段、堆区与进程及进程内的其他线程共享。特点:子进程是父进程的副本,拥有独立的内存空间。特点:不创建新进程,直接替换当前进程的代码。线程切换在进程空间内部完成,资源开销较小。线程切换在进程空间内部完成,资源开销小。功能:在调用函数的进程中创建一个线程。功能:在当前进程空间中执行新的程序。

2025-02-21 18:45:52 1585

原创 进程创建、进程调度、进程消亡

僵尸进程是指在进程结束后,空间未被回收产生原因:父进程未调用 wait() 或 waitpid(),或忽略了 SIGCHLD 信号。避免方法:1、让父进程先结束,子进程会成为孤儿进程,被init进程收养,子进程结束时,init进 程回收子进程空间 子进程结束2、父进程回收子进程空间(wait或者waitpid回收子进程空间。

2025-02-20 23:32:01 342

原创 文件IO、目录IO

常见的文件 I/O 操作包括 open()、read()、write()、lseek() 等,这些系统调用提供了访问文件、读取文件内容、写入数据和操作文件指针等功能。VFS 提供了很多与文件操作相关的函数,如 vfs_read()、vfs_write()、vfs_open() 等。在内核中,lseek() 系统调用通过 vfs_llseek() 来实现,它会根据文件的类型和文件系统的不同来处理文件偏移操作。open() 函数返回一个非负整数的文件描述符(文件句柄),如果出错,则返回 -1。

2025-02-17 23:16:39 400

原创 标准IO的学习

保存文件本身的数据(数据可能无法在终端显示或在终端显示乱码)(8)fread:从流中读取nmemb个对象,存放ptr指向的空间中,每个对象size字节。(7)fwrite:向流中写入ptr指向的nmemb个元素,每个元素size字节。可以在linux中船舰一个脚本:run.sh------->将make。(1)fputc:向stream流中写入 字符c。(2)fgetc:从stream流中接收一个字符。(3)fputs:将字符串写入stream流中。(5)fscanf:从流中读取格式化的字符串。

2025-02-15 20:03:06 272

原创 Linux软件编程:IO编程

d directory 目录文件 存放文件信息 目录IO、文件IO。l link 链接文件 与某个指定文件链接 链接IO、文件IO。4. 不同类型文件的操作方式: 标准IO 文件IO 目录IO 链接IO。2. 文件IO是一种没有缓存的IO 效率低 实时性好。

2025-02-14 20:11:14 465

原创 二叉树、哈希表、希尔排序

1. 二叉树中所有的分支节点都有左右孩子,且所有叶子节点都在同一层。数据通过哈希算法映射成唯一键值,存储在键值对应的位置,读取时可以根据键值快速读取。1. 从节点出发,离最远的叶子节点的距离称为该节点的高度。1. 从根节点出发,到达节点的距离称为节点的深度。1. 根节点:树形结构中最顶层的节点,只有后继,没有前驱。1. 二叉树所有的节点按照顺序排列。4. 层序遍历(逐层从左至右遍历)哈希算法:将数据根据哈希算法映射成唯一的键值。1. 前序遍历(根左右)不同的数据通过哈希算法映射出来的键值相同。

2025-02-13 19:50:35 629

原创 栈(顺序栈、链式栈)和队列(循环队列、链式队列)

3. 空栈:栈针指向要插入的元素的位置。4. 满栈:栈针指向栈顶元素所在的位置。1. 增栈:栈的增长方向自低向高。2. 减栈:栈的增长方向自高向低。栈和队列只允许在固定位置取出或者插入数据。2. 栈底:不允许入栈出栈的一端称为栈底。1. 栈顶:允许入栈出栈的一端称为栈顶。4. 出栈:将数据从栈顶位置取出。3. 入栈:将数据插入栈顶位置。5. 栈针:栈顶元素所在的位置。3. 入队:将元素插入到队列中。栈和队列是一种特殊的表状结构。4. 出队:从队列中取出元素。1. 队头:出队的位置。2. 队尾:入队的位置。

2025-02-11 20:19:19 222

原创 双向链表、循环链表、内核链表

1.创建2.头插3.遍历打印4. 替换5.删除6.销毁。

2025-02-10 20:55:01 191

原创 单向链表、段错误调试方法

段错误产生时可以生成一个包含段错误信息的core文件,根据gdb工具查看段错误产生时的堆栈信息能够直接定位到段错误产生的位置。走一圈回到相遇点,计数器的值即为环长。两个指针相遇的位置即为环入口位置。快指针走到末尾时,慢指针即停留在链表中间位置。文件(需要修改系统配置,只需要第一次修改,后续无需再次修改)一个指针从链表头开始走。一个指针从相遇点开始走。快指针走到末尾,慢指针刚好走到倒数第。将后一个节点的数据覆盖当前节点。快指针走一次,慢指针也走一次。6.不知道链表头结点的情况下删除链表中间节点。

2025-02-09 21:40:06 574

原创 Makefile工程管理工具、虚拟机联网设置、链表

二、虚拟机联网设置1.将虚拟机设置为NAT模式2. 将虚拟机网卡设置为自动获取IP地址 1. 打开网络配置文件 sudo vim /etc/network/interfaces 2. 修改为如下内容 3.保存退出3.重启网络服务 sudo /etc/init.d/networking restart4.测试与百度是否能够连通 ping www.baidu.com 如果与百度连通:1.数组和链表区别

2025-02-07 18:59:25 785

原创 数据结构、顺序表、gdb调试工具

1.概念:程序 == 数据结构 + 算法2.衡量程序好坏的标准:1.可读性2.稳定性3.扩展性4.时间复杂度(数据量增长与程序运行时间增长所呈现的比例函数关系称为时间渐进复杂函数也称为时间复杂度)5.空间复杂度3.数据结构:存储和操作数据对象的一种结构,用合理的数据结构能够减小程序的时间复杂度和空间复杂度4.分类:1.逻辑结构线性结构(表)非线性结构(树、图)2.存储结构顺序存储、链式存储、索引存储、散列存储5.数据结构:顺序表。

2025-02-06 18:59:52 479

原创 共用体、枚举、

2.结构体成员变量空间是独立的,共用体成员变量空间是共享的。存放的数据空间超过申请的空间大小,操作超过申请空间大小的数据,称为内存溢出、内存越界。2.栈区:存放局部变量,变量定义时申请空间,超过作用域回收空间。1.内存低地址存放低数据位称为小端。2.内存低地址存放高数据位称为大端。语言被执行后,操作系统分为不同的区域(堆和栈用来存放数据的区域)5.堆区空间很大的,可以用来存放超过。6.堆的增长方向由低到高。7.栈的增长方向由高到低。typedef等价于rename。3.内存溢出、内存越界。

2025-01-23 18:52:38 216

原创 指针和一维数组、二维数组的关系, 数组作为函数参数,构造数据类型

1.结构体成员变量只能存放在内存地址为自身基本类型长度整数倍的内存单元中。2.结构体整体的大小必须为最大类型长度的整数倍。1.结构体变量访问成员变量。2.结构体指针访问成员变量。数组的数组名是指向数组第一个元素的指针常量。数组的数组名是指向数组第一行元素的数组指针。1.构造数据类型:结构体、共用体、枚举。6.结构体作为函数参数。2.结构体变量的定义。4.字符型二维数组作为函数参数。3.一维数组和二维数组的本质。

2025-01-22 20:25:16 415

原创 二级指针、const指针、void指针、指针数组和数组指针

定义指针变量a,占8个字节空间,指针指向20个字节空间的一个数组。定义一个5个元素的数组,占40个字节的空间,每个元素是整形指针。1.函数体内部想修改函数体外部指针变量的值,需要传递指针变量的地址即二级指针。2.字符型指针数组:char *str[5];1.指针数组:int *a[5];2.指针数组的数组是二级指针。1.指针数组是数组,数组的每个元素是指针。2.数组指针是指针,指针指向一个数组。指向一级指针变量的指针。4.指针数组 和 数组指针。2. const指针。

2025-01-21 23:04:50 372

原创 字符型数组和字符串的传参、指针函数、函数指针

1. 字符型数组和字符串的传参1. 字符型数组和字符串的传参。

2025-01-20 19:57:21 361

原创 指针变量、指针作为函数参数、指针与数组的关系、数组作为函数参数

地址传递:将实参的地址给了形参,形参是指向实参的指针,可以利用形参修改实参的值。2.函数体内部想修改函数体外部变量值的时候使用地址传递。1.未经初始化的指针,或指向一段被释放过空间的指针称为野指针。2.提供一种对变量的间接访问,通过找到变量在内存中的位置来操作变量。--:向内存低地址偏移指向数据类型大小个字节空间。2.表达式的值为:变量在内存空间中的首地址。2.地址:用来区分内存中不同字节的编号,称为地址。1.&:获得变量在内存空间中的首地址。个字节空间,存放指针(地址)的变量,有时也会简称为指针。

2025-01-19 19:20:19 895

原创 函数的传参、递归函数、预处理命令

实参将值传递给形参函数体内部想使用函数体外部变量值的时候,使用值传递形参是实参的副本,形参的变化不会影响实参的变化。

2025-01-18 20:46:03 779

原创 函数的定义、变量的作用域、变量的存储类型

5.全局变量存放在静态区,全局变量可以和局部变量重名,局部变量会在作用域内将全局变量隐藏。函数体内部想使用函数体外部变量值的时候,使用值传递。2.局部变量的作用域在离定义该变量最近的大括号内。1.从终端接收一个年份,封装一个函数实现判断年份,如果为闰年返回。局部变量执行到变量定义时分配空间,超过变量作用域回收空间。封装一个函数传入两个数的数值,返回这两个数的最大公约数。封装一个函数传入两个数的数值,返回这两个数的最小公倍数。从终端接收一个数,封装一个函数,判断该数是否为水仙花数。2.可以减少重复性代码。

2025-01-17 21:53:51 299

原创 二维整形数组、二位字符型数组

数据类型数组名[行数][列数];

2025-01-17 21:37:51 265

原创 一维整形数组、字符型数组

char数组名[元素个数];注意:1.元素个数必须为常量2.元素个数要能够存放的下整个字符串(包含末尾的\0字符)

2025-01-17 21:17:49 676

原创 switch嵌套结构、循环结构、辅助控制语句

(2)continue:结束本次循环。(3)return:结束当前函数。从终端接收一个年份,判断概念为闰年还是平年。普通闰年(4的倍数,却不是。的值,根据公式计算result的结果并打印。goto常用于出错处理。1.用双for循环实现9*9乘法表。编写程序,从终端接收。

2025-01-13 19:22:48 645

原创 scanf、puts、gets、if分支,switch分支

1.scanf():从终端接收字符串并转换为对应的数据形式存放到内存空间中(1).接收非输入控制符 scanf("m");(2).接收输入控制符%d 按照int类型接收%ld 按照long类型接收%f 按照float类型接收%lf 按照double类型接收%s 按照字符串接收%c 按照char类型接收(可以接收到' '和'\n'字符的)

2025-01-12 18:21:23 682

原创 自学嵌入式第3日总结

m : math的缩写,链接数学库。%nd n:域宽,不足域宽用空格补齐。%.mf m:保留小数点后m位有效数。%0nd 0:不足域宽高位用0补齐。3.输入三角形的三个边长,求周长和面积并输出。%-nd -:左对齐。1.printf()打印输出的几种格式。2. printf()打印表达式的值。

2025-01-11 19:01:37 178

原创 数据类型、变量常量、表达式、运算符

1.数据类型的值域范围。

2025-01-10 19:52:35 141

原创 Linux的基本命令、目录结构、C语言开发相关软件

touch /test1/filename1.txt /test2/filename2.txt 同时给不同目录创建不同文件。ls filename1 filename2 filename3 同时查看不同目录下的所有文件。3. rmdir命令 :删除空目录文件 (注:若目录文件不为空,使用该命令会报错)绝对路径:登录用户不同,所在目录不同,相同路径不会出现不同的含义。3.相对路径:登录用户不同,所在目录不同,相同路径会出现不同的含义。用户在家目录下创建文件、修改文件、删除文件权限不受限制。

2025-01-09 20:14:45 1776

空空如也

空空如也

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

TA关注的人

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