- 博客(21)
- 收藏
- 关注
原创 linux字符设备驱动程序
linux系统中万物皆文件,驱动程序加载后会在/dev目录下生成一个对应的文件,如/dev/led。应用程序就是先用open打开该文件,用write控制led的亮灭,用read读取led的亮灭,用完之后用close关闭该文件。这里需要注意的是,应用程序运行在用户空间,驱动程序运行在内核空间。应用程序必须使用一个叫做“系统调用”的方法来实现从用户空间“陷入”到内核空间,这样才能实现对底层驱动的操作。一个open函数执行的过程如下。
2024-09-07 13:44:38
1041
原创 进程间的通信--->IPC/UDP
OSI模型: open system interconnect 理论模型1977 国际标准化组织各种不同体系结构的计算机能在世界范围内互联成网。IP:计算机的软件地址(可改变)MAC:计算机的硬件地址(不可改变)(可换网卡换MAC地址)
2024-08-13 09:02:19
841
原创 IPC 进程间通信 inter process communicate
1.共享内存:进程间通信最高效的形式操作流程:获取key值 ==》申请对象(创建共享内存) ==》映射对象==》读写数据==》撤销映射 ==》删除对象1.创建共享内存:2.建立共享内存和用户空间映射3.读写数据4.解除映射关系5.解除共享内存。
2024-08-12 19:46:07
728
原创 linxu---线程
功能:将已经定义好的互斥锁初始化。参数:mutex 要初始化的互斥锁atrr 初始化的值,一般是NULL表示默认锁返回值:成功 0失败 非零sem_t sem;信号量的类型 信号量的变量。
2024-07-22 15:01:28
846
原创 Linux---进程
在fork之后,一般情况那个会先运行,是不确定的。2.进程:是一个程序动态执行的过程,包括创建、调度、消亡(动态的)子进程是父进程的副本。子进程获得父进程数据段,堆,栈,正文段共享。WTERMSIG(status)如果是信号终止的,那么是几号信号。1.程序:是一段存放在外存中代码的集合(静态的)进程创建后,操作系统为进程分配独立的4G虚拟空间。父进程:创建新进程的进程称为新进程的父进程。子进程:被创建的进程称为原进程的子进程。参数:status 进程退出时候的状态。进程是操作系统资源分配的最小单位。
2024-07-22 00:19:37
641
原创 C语言-链表
由于频繁申请和释放,导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间(空间不连续),将这样的空间称为内存碎片。3.malloc需要和free搭配使用,如果只有malloc没有free会内存泄露。练习:要求申请堆区空间,将"hello world"存放到堆区空间,完成打印。2.一个空间只能被free一次,多次free程序会崩溃。size:申请堆区空间的大小。1.free只能释放堆区空间。程序中malloc的空间没有被释放。返回获得的空间的首地址。内存溢出也称为内存越界。
2024-02-01 10:52:13
302
1
原创 C语言-结构体
练习:定义一个学生的类型,封装一个函数GetStuInfo获得学生信息放入结构体中,>> 右移 右移n位 等价于 让该数 / 2^n。
2024-01-30 20:11:59
390
1
原创 指针 与 结构体
局部变量的地址不能返回,因为局部变量会随函数作用域结束被回收,虽然能够获得返回的地址,但地址对应的空间已经被回收过了。const修饰p和*p,指针变量p的值不能改变,也不能利用*p改变直系那个空间中的值。const修饰 p,指针变量p的值不能改变,但可以利用指针变量p修改指向空间中的值。const修饰 *p,指针变量p的值可以改变,但不能利用指针修改指向空间中的值。2.函数体内想修改函数体外指针变量值的时候,要传递指针变量的地址即二级指针。-> :结构体指针类型访问成员变量使用 ->
2024-01-29 20:36:01
732
原创 二维数组,二维指针
指针数组主要用来操作字符串数组,通过将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作。二维数组主要用来存储字符串数组,通过每行存储一个字符串,多行存储多个字符串所组成的数组。二维数组的数组名是指向数组第一行元素的数组指针。
2024-01-29 00:06:13
131
原创 c语言-指针和数组
练习:封装一个函数,给定一个字符串,统计该字符串中大写字母、小写字母、数字和空格的个数。定义一个数组指针变量,占8个字节空间,指针指向了一个int类型5个元素的数组。定义一个指针数组,数组占40个字节空间,每个元素为int *型,共5个元素。对数组指针*,值不变,类型降级成为指向数组第一个元素的指针。&a:获得数组的首地址,其类型为int (*)[5]数组的数组名a是指向数组第一个元素的一个指针常量。指针数组时数组,数组每个元素都是指针类型。1.sizeof运算时。数组指针是指针,指针指向一个数组。
2024-01-26 21:26:40
390
1
原创 c语言-指针
使用指针变量等价于使用其内部存放的指针,所以我们有时也把指针变量简称为指针。实参地址传递给形参,形参就是实参的指针,可以通过对形参取*改变实参的值。3.指针变量:是一个变量, 变量里面存放了一个指针(地址), 称为指针变量,实参将值传递给形参,形参是实参的副本,形参改变不会影响实参。野指针:未经初始化的指针,指向已经被释放过空间的指针称为野指针。2.指针:指针就是地址,地址就是指针,指针多了指向的概念。空指针:NULL 0x0, 指向内存地址为0x0的指针。作为右值,直接取指针指向空间中的值。
2024-01-25 19:48:01
340
原创 c语言-函数
实参将值拷贝一份给形参,形参是实参的副本,形参的值发生改变不会影响实参。数组传递时,函数体内部形参操作的数组和实参操作的数组为同一数组。2.编译时开辟空间,程序运行时加载该空间。2.可以将变量的作用域限定到本文件中。函数体内部想使用函数体外部变量值的时候使用复制传递。3.执行到超过变量作用域范围回收变量空间。变量从空间被开辟到被回收的整个过程称为生存周期。变量作用域默认为离定义该变量最近的大括号内。2.执行到变量定义时开辟空间。声明一个变量为外部存储的变量。全局变量:变量作用域在整个文件中。
2024-01-24 19:35:05
366
原创 c语言-字符串的操作
3.函数调用时会发生实参向形参空间的拷贝,实参将值拷贝给形参(一一对应),实参类型与形参类型不一致时,将实参类型默认转换为形参类型。两个字符串比较,从左到右每个字符进行比较,不相同的字符,谁的ASCII码值大,字符串就大。函数类型 函数名(数据类型1 形式参数1, 数据类型2 形式参数2, ...)3.函数类型应该与返回值的类型一致,如果不一致以函数类型为准。如果第一个字符串 > 第二个字符串,结果为 > 0 的值。如果第一个字符串 < 第二个字符串,结果为 < 0 的值。1.第一个字符串要空间足够大。
2024-01-23 18:24:14
1407
原创 c语言-数组
/没有给定初值的元素,值为0值('\0')C语言没有字符串类型,也无法定义字符串变量,只能通过字符型数组,每个元素存放一个字符,最终存放字符串。1.strlen:获得字符串的长度(字符串开头到离开头最近的\0之 间的字符个数,不包含\0字符)a = {1, 2, 3, 4, 5, 6};1.元素个数必须为常量或常量表达式,不能为变量或变量表达式。行能省略,列不能省略。
2024-01-22 20:32:25
854
原创 循环结构与数组
1.循环结构:1.while3.for1.基本形式2.嵌套形式for (A;B;C)D;for (E;F;G)H;外层循环执行一次,里层循环执行一遍4.goto出错处理。
2024-01-21 22:15:48
793
1
原创 c分支语句与循环结构
1.if分支语句:练习:编写程序,从终端接收两个数 Num1和Num2,如果Num1 >= Num2则打印Num1否则将两者交换打印Num1使用场景:1.判断逻辑使用分支语句2.同一类数据完成不同操作1.简单分支:2.阶梯分支:if (表达式1)语句块1;else if (表达式2)语句块2;else if (表达式3)语句块3;else语句块4;3.嵌套分支:if (表达式1)语句块1;
2024-01-19 21:24:52
907
1
原创 c语言入门
1.打印非输出控制符:");\n 换行符\t 横向制表符\v 纵向制表符\b 退格符\r 回车符\\ \字符\" "字符2.打印单个输出控制符:%d 按照十进制打印%o 按照八进制打印%x 按照十六进制打印%c 按照字符打印%f 按照浮点数类型打印。
2024-01-18 19:35:27
878
1
原创 常量与变量
1.putchar只能打印一个字符,想打印多个字符需要多次调用putchar。从左到右依次执行表达式,并将最后一个逗号表达式的结果作为整体逗号表达式的结果。1.getchar会将程序阻塞,直到用户输入数据,程序才能继续向下执行。小数据放入大空间:数据扩展,有符号数高位补符号位,无符号高位补0。"a":字符串常量,有2个字符'a' + '\0'定义两个变量可以是整形或者浮点数类型,对这两个变量赋值,左值为浮点数类型,右值为整形,会将值扩展精度。左值为整数类型,右值为浮点数类型,会舍弃精度。
2024-01-17 19:50:17
987
原创 c语言数据类型
double 双精度浮点数类型(最多表示12-14位有效数字) 8个字节 -1.80*10^308 - 2.23*10^-308 1位符号位 + 11位指数位 + 52位尾数位。float 单精度浮点数类型(最多表示6-8位有效数字) 4个字节 -3.4*10^38 - 1.18*10^-38 1位符号位 + 8位指数位 + 23位尾数位。1.变量名可以由字母、数字、下划线构成不能以数字开头。
2024-01-16 20:35:50
427
1
原创 Linux基础操作
3.重启:Ubuntu系统中点击"Power Off",再将虚拟机关闭,再重新启动虚拟机和Ubuntu系统。第二组rwx: 创建文件的用户同组用户对文件是否拥有读写执行权限。当前所在目录不同,登录用户不同,相同路径不会产生不同含义。3.并在test2目录下创建filename2.txt。当前所在目录不同,登录用户不同,相同路径会产生不同含义。5.窗口: 设置窗口大小,选择"查看" -> "立即适应客户机"可以有多个,也可以一个没有,名字没有限制。第一组rwx: 创建文件的用户对文件是否拥有读写执行权限。
2024-01-15 20:14:43
388
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人