- 博客(25)
- 收藏
- 关注
原创 手把手教你理解IO多路复用
想象一个餐厅服务员的故事:传统阻塞模式:服务员每次只服务一桌客人,其他客人必须等待多线程模式:给每桌都配一个专属服务员(资源消耗大)IO多路复用:一个服务员同时监听多桌需求,谁好了处理谁这就是IO多路复用的核心价值——用单线程/进程管理多个IO流!2.2 操作fd_set的宏三、实战:基于select的TCP服务器3.1 服务端代码框架3.2 代码解析 创建监听socket并初始化描述符集合在循环中调用select等待事件检查监听socket是否就绪(新连接)遍历检查
2025-03-06 19:59:13
419
原创 Linux系统下Mplayer的高效人机操作界面设计
include "list.h"//双头链表/* mplayer 播放状态 *//* mplayer 播放速度 *//* mplayer 播放模式 */#endif。
2025-02-28 18:19:01
1257
原创 线程与线程:从入门到放弃
一个进程可以拥有多个线程,这些线程共享进程的内存空间和资源,但每个线程拥有独立的执行栈和程序计数器。通过本文的学习,你应该对线程有了基本的了解,并掌握了如何在C语言中使用`pthread`库创建和管理线程。本文将带你走进线程的世界,从基础概念到实际应用,用简单的C语言代码示例,让你轻松理解线程的奥秘。- 线程函数是一个返回`void*`类型的函数,接受一个`void*`类型的参数。`retval`:指向线程返回值的指针,通常为`NULL`。`attr`:线程属性,通常为`NULL`。
2025-02-20 22:25:33
772
原创 linu软件编程——IO
(2)编写程序获得一个文件中出现哪些字符?及每种字符出现的次数?及哪种字符出现的次数。(1)利用fread和fwrite实现图片内容的拷贝。主函数↓↓↓↓↓↓↓。
2025-02-15 19:27:59
224
原创 Linux的IO编程基础:从入门到实践
Linux IO编程的学习就像解锁不同层级的技能树。建议从基础文件操作开始,逐步过渡到网络编程和高效IO模型。多动手实践,通过实际项目(如实现简单HTTP服务器)加深理解。后续可深入研究《UNIX环境高级编程》等经典著作,向高手进阶!学习资源推荐书籍:《UNIX环境高级编程》在线文档:Linux man pages实战项目:libevent源码分析。
2025-02-14 19:29:19
967
原创 从0到1:STM32温控系统开发踩坑指南
增量式PID控制(参数Kp=40, Ki=0.5, Kd=10初始值):STM32F103C8T6最小系统板(72MHz主频满足需求)先设Ki=0,Kd=0,逐渐增大Kp至系统开始震荡。测量精度:±0.5℃(使用DS18B20传感器):数字温度传感器DS18B20(单总线协议):实现0-100℃范围内的温度闭环控制。加热:5V陶瓷加热片(MOS管驱动)关键参数采用局部刷新(非全屏刷新):10kΩ电阻 + 0.1μF电容。温度历史数据记录(需外接SD卡)散热:5V直流风扇(三极管驱动)
2025-02-14 18:38:56
1764
原创 数据结构——内核链表使用(2)
----------------------------------------------------------------------------------分割线。完成编辑链式队列和循环队列的编写。结构体函数 ↓↓↓↓↓。封装函数 ↓↓↓↓↓。结构体函数↓↓↓↓↓。封装函数 ↓↓↓↓↓。
2025-02-11 19:48:03
510
原创 数据结构——内核链表使用
1. 利用内核链表编写一个手机通讯录2. 能够添加新的联系人3. 能够删除联系人4. 能够修改联系人信息5. 能够查询某个联系人信息6. 能够打印所有联系人信息用户界面:= 通讯录 =1.添加联系人2.删除联系人3.修改联系人信息4.查询联系人信息5.打印所有联系人信息6.退出请输入:主函数main.c↓↓↓↓↓。
2025-02-10 22:25:25
333
原创 数据结构——双向链表编写
要求:使用封装工程代码完成双向链表的定义、创建、头插入、显示、替换、删除、销毁等功能。其定义为:1.创建2.插入3.遍历4.替换5.删除6.销毁。
2025-02-08 20:55:23
387
原创 数据结构——单向链表的编写
要求:使用封装工程代码完成链表的定义、创建、头插入、显示、删除、查找、替换、尾插入等功能。其定义为:(1)创建链表:(2)链表头插入:(3)链表元素显示:(4)链表元素删除:(5)链表元素查找:(6)链表元素替换:(7)链表尾插入:要实现以下函数需要创建3个文件,分别为:main.c , linklist.c , linklist.h。使用此格式可以更方便阅读和编写。
2025-02-07 21:19:33
411
原创 数据结构——顺序表的编写及其思路
要求:使用封装工程代码完成顺序表的定义、创建、添加、显示、插入、查找、替换、删除、清空、销毁等功能。其定义为:(1)创建顺序表:(2)顺序表添加元素:(3)顺序表元素显示(4)指定位置插入元素(5)顺序表元素查找(6)顺序表元素替换(7)删除顺序表(8)清空顺序表(9)销毁顺序表要实现以下函数需要创建3个文件,分别为:main.c , seqlist.c , seqlist.h。使用此格式可以更方便阅读和编写。
2025-02-06 21:10:58
455
原创 构造数据类型
结构体成员变量只能存放在内存地址为自身基本类型长度整数倍的内存单元中。结构体访问成员变量最终的类型由成员变量决定。结构体整体的大小必须为最大类型长度的整数倍。
2025-01-22 21:40:19
136
原创 指针数组与二级指针的简单应用
指向一级指针的指针,可以理解为为一级指针寻找了一个地址,其中二级指针所指向的是一级指针的地址,一级指针指向的是所对应的数或者字符。指针数组其本质是数组,但是里面存入的变量为指针(理解为地址),其基本形式为:char *1.const 等价于 readonly: 只读。完整形式:char *pstr[10]一、什么是指针数组?
2025-01-21 20:57:41
378
原创 指针的简单使用
封装函数MyStrlen实现获得字符串长度的功能。封装函数MyStrcpy实现字符串拷贝的功能。封装函数MyStrcat实现字符串拼接的功能。封装函数MyStrcmp实现字符串比较的功能。封装函数实现传入一个字符串,实现字符串的倒置。
2025-01-20 20:37:06
178
原创 C语言中指针的简单使用
注意:int*A表示定义一个int的指针(地址),其名字叫A,而*A为对指针(地址)A进行“*”操作其结果为寻找指针(地址)对应表示的数据。其提供一种对变量的间接访问,通过找到变量在内存中的位置来操作变量。指针就是地址,地址就是指针;未经初始化的指针,或指向一段被释放过空间的指针称为野指针。其中“&a”的形式将变量a所在的地址寻找出来,而“*A”可以将指针变量所对应的数据变量寻找出来。例如:假设数据200在内存中存储的地址为0X000f(地址存储为16进制)。
2025-01-19 19:45:01
842
原创 c语言中如何自己定义函数并使用
作用:函数可以让程序模块化,减少重复性代码函数类型函数名(数据类型1形参1,数据类型2形参2,数据类型3形参3,...)语句块;return返回值;解释:1.函数类型:函数运行结果的类型,如果不写默认为int类型,如果不想有运行结果类型可以为void类型2.函数名:函数名只能包含字母、数字和下划线,不能以数字开头。3.形参:定义时表示对数据处理方式4.返回值:函数的运行结果。
2025-01-17 20:54:51
587
原创 字符型一维数组的使用
1.概念:C语言中经常用字符型数组存放字符串2.定义:char 数组名[元素个数];例如:"char str[10]"。3.注意:元素个数必须为常量;元素个数要能够存放下整个字符串(包含末尾的\0字符//全部初始化//局部初始化//默认初始化。
2025-01-15 19:06:00
403
原创 c语言中利用数组实现冒泡和选择排序。
项目要求:在歌手大奖赛中若干名裁判为歌手打分,歌手最后得分的方法是:去掉一个最高分,去掉一个最低分,取剩余成绩的平均分(以-1为输入结束标记)。冒泡排序可以总结为“一比较,一交换”(两个变量之间先进行比较,若满足需求,则直接交换,随后在和下一个变量进行比较,如此反复)。上述为选择排序法的基本逻辑,其中同样需要注意的是确定 i ,j 的范围,从而达到代码简单,减少算力的目的。上述为冒泡排序法的基本逻辑,其中需要注意的是想明白 i ,j 的范围,从而达到代码简单,减少算力的目的。·数组元素个数是有限的。
2025-01-14 20:04:56
394
原创 C语言中的循环结构
例:鸡兔同笼中鸡兔一共50只,140只脚,求鸡兔各自数量。例:使用for循环实现0-100的求和。例:利用双层for循环实现99乘法表。goto用于出错处理。
2025-01-13 23:13:09
167
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人