自定义博客皮肤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)
  • 收藏
  • 关注

原创 LINUX ---网络编程(三)

并发能力的实现方式不同,从完全不支持并发(单客户端)→串行处理(单循环)→并行处理(多进程),逐步提升了服务器的服务能力,但也带来了更复杂的实现和更多的系统资源消耗。主流程:socket()创建监听套接字 → 设置地址重用 → bind()绑定 → listen()监听 → 循环accept()接受连接。连接处理:每接受一个连接,通过pthread_create()创建线程,由线程执行do_client函数处理具体通信。:主进程负责接受客户端连接,为每个连接创建独立线程处理通信,实现并发服务。

2025-08-28 18:35:59 930

原创 LINUX --- 网络编程(二)

规定每个消息的固定长度(如 100 字节),不足则补位,接收方每次读取固定长度的数据。使用特殊字符(如\r\n)作为消息结束的标志,接收方遇到该标志即认为一个完整消息结束。发送端:操作系统会根据 TCP 缓冲区情况进行数据包的合并优化(Nagle 算法),导致多个小消息可能被合并发送;设计包含消息头和消息体的结构体,消息头中包含消息类型和消息长度等信息。服务器实现(维护客户端列表、处理不同类型消息、广播消息)主函数:初始化,创建客户端列表,循环接收消息并处理。处理下线消息:更新客户端状态,广播下线信息。

2025-08-27 20:02:27 438

原创 LINUX网络编程--网络的发展与通信

二十世纪五十年代,美苏进入冷战时期,由于安全问题,美国担心传统的通讯系统如果遇到核心枢纽被摧毁的情况,整个通讯网络就会瘫痪,于是DARPA开始研发计算机通信。

2025-08-22 18:25:02 756

原创 LINUX 软件编程 -- 线程

线程是一个轻量级的进程线程本质就是一个进程线程和进程不完全一致,轻量指空间,进程空间和线程空间管理方法不同。

2025-08-19 23:15:00 638

原创 LINUX软件编程 -- 进程与线程

进程:是程序动态执行的过程,包括创建、调度、消亡程序:存放在外存中的一段数据的集合。

2025-08-18 19:01:16 624

原创 LINUX软件编程 -- IO

1. IO指input/output2. Linux系统中一切皆是文件3. IO操作的对象是文件。

2025-08-15 20:15:00 912

原创 Linux软件编程 -- 系统概述与shell命令

世界上第一款操作系统:unix操作系统为了屏蔽底层不同的硬件平台,为上层提供统一的接口GNU:GNU's Not Unix 开源 GitHub GPL协议林纳斯 Linux重写了unix操作系统,类Unix操作系统Linux应用场景:服务器、嵌入式常见的Linux系统:Ubuntu、Debian、Redhat、CentOS等Linux操作系统是操作系统的核心,也称为内核,内核的主要功能为:内存管理多任务管理文件系统管理多任务间的通信网络管理硬件设备管理。

2025-08-14 18:01:09 503

原创 数据结构与算法 -- 二叉树

二叉树的编号(如果节点编号为n,左孩子编号:2n,右孩子编号为:2n+1)展开后是连续的,层:根节点层数为1,后续每引申出的一个节点就在该节点层数上+1;高度:节点高度是由该节点到最远的叶子节点的距离表示该节点高度;树的层树:树的层数由层数最高的节点对应的层数表示树的层数;深度:节点深度是由该节点到根节点的距离表示节点深度;后序遍历:访问顺序:左子树 → 右子树 → 根节点;节点:组成树形结构的一个小的单元称为节点;前驱(祖先):由哪个节点可以访问到该节点;树的高度 == 树的深度 == 树的层数;

2025-08-07 18:51:30 927

原创 数据结构与算法--栈与队列

链表、栈和队列都是一种线性结构(一对一);栈和队列是一种特殊的表状结构;栈只允许在栈顶位置入栈和出栈元素;链表可以在任意位置插入和删除元素;栈和队列只允许在指定位置插入和删除元素;

2025-08-06 19:31:36 394

原创 数据结构与算法--链表

* 链表存放数据的类型 *//* 链表节点类型 *///存放数据空间//存放下一个节点地址}linknode。

2025-08-04 19:47:43 1658

原创 C语言学习---构造数据类型与位运算

全部初始化:按成员顺序赋值,如,一次性给所有成员设定初始值。enum 枚举类型名 {常量1,常量2,// 更多常量枚举常量默认是int类型,第一个常量默认值为 0,后续常量值是前一个常量值 +1 ,也可在定义时手动赋值修改,比如,让Mon为 1 ,Tue为 2 等,方便程序中用有意义的名称代替魔法数字(直接写的无意义数字 )。

2025-07-30 19:16:50 922

原创 C语言学习 --指针(二)

指针数组:是数组,数组的每个元素是指针。数组指针:数指针,指针指向整个数组。int *a[5];//定义一个数组,占40个字节,数组名为a,数组中每个元素都是int *型的指针//定义一个指针,占8个字节,指针变量名为a,是指向数组20个字节空间的指针。

2025-07-28 20:12:21 741

原创 C语言学习--指针

存储类型 数据类型 *变量名;int *p;char *p;float *p;double *p;int *p, *q;注意:不能使用未经初始化的指针2. 野指针:未经初始化的指针或者指向已经被释放空间的指针,称为野指针3. 空指针:指向内存地址为0x0的指针称为空指针,用NULL来表示内存地址0x0空间为只读空间,不能赋值,NULL指针不能执行*p = value操作int *p, *q;

2025-07-27 19:47:56 971

原创 函数传参与预处理命令

无参宏:宏名一般全大写区分变量。x : y是代码替换,编译时展开,无传参开销,简单逻辑优先用;和函数有诸多区别(参数类型等概念、调用传参过程、代码加载时机体积、执行效率、适用场景不同 )。

2025-07-24 20:24:48 420

原创 C语言函数

变量并非在整个程序中都能随意使用,作用域定义了它的有效范围:局部变量:只在 “最近大括号”内有效 ,仅在所在代码块内生效。比如函数内定义的变量,出了函数就失效,有效的避免变量冲突。

2025-07-23 19:40:12 593

原创 字符串数组与函数的学习

在 C 语言里,存放字符串要使用字符型数组,而存放字符串数组则需用字符型数组的数组,也就是二维字符型数组。定义:数组元素个数得是常量,例如2.元素访问与存储特性元素访问:可以通过:数组名[行下标][列下标] //访问一个字符元素,也能通过:数组名[行下标] // 访问数组第_行下标_行的字符串。存储特性:存放数据的空间是连续的,并且数据按顺序存放(先存第 0 行,再存第 1 行……)。能够避免编写重复性代码,让程序的模块化程度更高。函数的三种形式函数的定义:定义一个函数的实现;

2025-07-22 19:40:13 495

原创 学习嵌入式第六天

行数和列数必须为常量,格式为“数据类型 数组名[行数][列数]。本质:二维数组是由一维数组构成的一维数组,N维数组可以看成是由N-1维数组构成的一维数组。初始化:全部初始化:可以用大括号将所有元素值括起来进行初始化。局部初始化:只对部分元素进行初始化,未初始化的元素自动初始化为0。默认初始化:行可以省略,列不能省略,系统会根据初始化值自动推断行数。存储:连续性:数组在内存中所占空间大小等于每个元素所占空间大小乘以行数再乘以列数,元素在内存中是连续存储的。

2025-07-21 19:16:02 632

原创 【无标题】

1. 打印非输出控制符:printf("hello world\n");\0:字符串结束标志;gets 从终端接收一行字符串 gets可以接收带' '的字符串,scanf无法接收带' '的字符串。scanf认为' '和'\n'是用户结束数据的标志,所以不会读取到代码中。puts 向终端打印一行字符串 puts会多打印一个\n字符。%nd n:域宽,不足域宽,高位用空格补齐。_%c 从终端接收一个非空格和\n的字符。scanf :从终端接收格式化的字符串。%0nd 0:不足域宽,高位用0补齐。

2025-07-20 22:27:21 340

原创 学习嵌入式的第四天

解释:因为 1 是一个非 0 值,所以 while 循环的条件始终为真,循环会一直执行下去,除非在循环体内部有跳出循环的语句(如 break )。- 执行流程:先判断 表达式 的值,如果为真(非 0),则执行 语句块 ,然后再次判断 表达式 的值,直到 表达式 的值为假(0)时,退出循环。- 执行流程:先执行 语句块 ,然后判断 表达式 的值,如果为真(非 0),则再次执行 语句块 ,直到 表达式 的值为假(0)时,退出循环。表达式1:表达式2;

2025-07-18 21:32:55 358

原创 学习嵌入式第三天

今天是学习嵌入式的第三天,主要学习了C语言部分的表达式,运算符,了解了运算符的优先级,以及输入输出函数的部分内容。

2025-07-16 23:11:52 457

原创 学习嵌入式第二天

字符常量:如 'a' 、 'A' 、 '#' 等,还有转义字符如 '\n' (换行符)、 '\t' (制表符)等,( '\八进制数' ,八进制数为3位),十六进制( '\x十六进制数' ,十六进制数2位)表示。整形常量:默认为 signed int ,有多种表示形式,如 123 、 -123 、 0123 (八进制)、 0x123 (十六进制)等,还可加 u / U (无符号)、 l / L (长整型)等后缀。缺省类型:void 表示,可修饰函数参数、返回值表示类型缺省,也可修饰指针表示指针指向类型缺省。

2025-07-15 19:46:37 310

原创 学习嵌入式第一天

gcc filename.c -o filename生成filename。ls -a查看当前目录所有文件包括隐藏文件;-编译gcc -s filename.c -o filename.s将C语言代码编译成汇编代码。-汇编gcc -c filename.c -o filename.o将汇编代码编译为二进制代码。-链接gcc filename.c -o filename将多个二进制代码链接成一个可执行程序。-预处理gcc -E filename.c -o filename.i处理和#号相关的代码。

2025-07-14 23:35:56 427

空空如也

空空如也

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

TA关注的人

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