自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux 网络编程相关

socket()INADDR_ANY定义意义:服务器在绑定IP时使用。表示绑定本机的所有网卡IP(无论本机有几块网卡,IP是多少)。文档强调:云服务器不允许直接 bind 公有IP,编写服务器时强烈推荐直接写INADDR_ANY,这样服务器可以接收来自任何网卡的请求。如果写死具体IP,服务器只能接收发往该IP的数据。

2026-11-09 23:04:52 344 3

原创 linux网络 启动

协议就是一种约定。就像打电话前约定“响几声算挂断”一样。在网络中,不同厂商、不同操作系统的硬件林立,要想顺畅通信,就必须约定好统一的数据格式。为什么分层:软件设计中为了模块化、解耦合,网络协议被设计成了层状结构。OSI 七层 vs TCP/IP 五层:OSI 是理论上的七层(物理、数据链路、网络、传输、会话、表示、应用),但在工程实践中,会话层和表示层很难在操作系统内核中落地,最终落地的是TCP/IP 五层(或四层)模型。层号OSI 七层模型TCP/IP 五层模型核心功能与代表设备/协议7。

2026-11-04 15:33:56 184

原创 STM32 USART 串口

UART(Universal Asynchronous Receiver/Transmitter),即通用异步收发器。它是一种硬件电路,用于设备间的串行通信(数据按位顺序,一次发1位)。交叉接线:Tx 连 Rx,共地。异步全双工:没有时钟线,靠波特率同步;收发独立。波特率:本质是电平持续时间,通信双方必须一致。帧格式:是双方约定好的语言规则,起始位(低) + 数据位(LSB先发) + 校验位(可选) + 停止位(高),保证了数据的确定性。

2026-10-29 21:20:18 287 4

原创 Linux 线程同步

互斥是同步的基础:任何对共享状态的修改,都必须在加锁的情况下进行。判断条件必须用while循环:永远防范伪唤醒和逻辑条件在等待期间被改变。不要先解锁再等待:必须使用系统提供的原子操作(如或 信号量),防止错失信号。分清signal和broadcast:如果只唤醒同类线程,用signal效率更高;如果依赖状态发生重大改变(如停止服务),用broadcast唤醒所有。

2026-10-28 19:37:01 331 4

原创 Linux 线程互斥

课件本节四个目标:1-1 背景概念 → 1-2 互斥量 mutex → 1-3 实现原理 → 1-4 封装。

2026-10-26 21:33:33 663

原创 Linux线程:this指针在pthread中的解决方案

this。

2026-10-23 14:59:39 278

原创 关于Linux 线程局部存储的认识

回到开头那个counter跑不对的例子。问题的本质不是"多线程很危险",而是"你用错了共享粒度"——你根本不需要两个线程共享一个计数器。全局变量是"所有人共用一块黑板",局部变量是"每个人手里的草稿纸",而 TLS 是"每个人一块刻着自己名字的黑板"。新代码写,看到__thread不必惊讶,那是 GCC 的老前辈写法。至于它为什么跑得快又不用加锁——想想那个fs寄存器就明白了。

2026-10-23 14:30:41 315

原创 Linux 线程控制

【代码】Linux 线程控制。

2026-10-21 20:50:51 328

原创 STM32 时钟树与 RCC

本篇文章围绕。

2026-10-19 23:13:25 586

原创 Linux 线程概念

线程是进程内部的执行控制序列,任何进程至少拥有一个主线程。线程本质上在进程的地址空间内运行,共享进程的资源。在Linux内核中没有专属的线程结构体,线程以轻量级进程的形式实现,同样使用描述,相比传统进程更加轻量化。将进程的虚拟地址空间资源合理分配给不同执行流,就形成了多个线程。要彻底理解线程,必须先搞懂内核的内存资源划分机制,也就是分页式存储管理。

2026-10-19 19:28:35 233

原创 Linux:对 WNOHANG 的深层理解

WNOHANG非阻塞地检查并回收已经退出的子进程。// 回收所有已经退出的子进程已经退出的:回收;还没退出的:不等待;父进程继续做自己的事;不会产生僵尸;还能拿到每个子进程的退出状态。所以,如果不想用SIG_IGN丢失退出状态,又不想被waitpidSIGCHLD就是标准解法。

2026-10-16 14:07:37 358

原创 Linux:对有关 SIGCHLD 的深层理解

僵尸进程不占内存,但占 PID 和内核进程表项。如果大量产生又不回收,可能耗尽系统资源。如果没有特别设置,内核不会因为子进程退出而给父进程执行什么默认处理动作。子进程退出后,并不是立刻从系统里彻底消失。这些子进程退出后不用保留状态了,直接回收,别留僵尸。之前,这个已经退出但还没被回收的子进程,就是。你的某个子进程终止了、停止了,或者继续运行了。子进程退出后内核自动回收,不产生僵尸。如果父进程先退出,子进程会被。这次子进程退出后不会留下僵尸。,子进程退出时不会变成僵尸,,因为退出状态会被丢弃。

2026-10-16 13:44:49 287

原创 Linux 捕捉信号

默认动作、忽略、自定义捕捉。当信号的处理动作是用户自定义函数,并在信号递达时调用该函数,就称为捕捉信号。处理函数不是main调用,而是由内核在合适时机回调,属于异步处理。捕捉信号就是:内核在从内核态返回用户态前检查未决信号,若该信号需要自定义处理,就暂停原控制流,切换到用户态执行处理函数,处理完通过sigreturn回到内核,再恢复原流程。

2026-10-15 23:04:19 106

原创 STM32 GPIO输入模式

输入模式引脚接高电平引脚接低电平引脚悬空(默认输入值)上拉输入101下拉输入100浮空输入10不确定(随机)模拟输入直接传给ADC等,不经过施密特触发器直接传给ADC等悬空电压不确定一句话理解:GPIO输入就是通过硬件电路(上下拉电阻设定缺省值 + 施密特触发器抗噪整形),将外部物理世界的高低电平或模拟信号,干净、确定地转换为MCU内部寄存器能读懂的 0 或 1(或直接交给ADC处理)。

2026-10-11 23:13:09 449

原创 c++11:fuction包装器

是 C++11 中最实用的工具之一,它用类型擦除把各种可调用对象统一成一种类型,让回调、事件、策略模式变得简洁优雅。但它的代价是运行时的间接调用与潜在的堆分配。把它当作"需要运行时多态的可调用对象容器"来用,而不是"万能函数参数"——这是用好它的关键。一句话记住:需要统一类型 → 用;追求极致性能 → 用模板 /auto。

2026-10-11 14:49:13 111

原创 linux 进程信号(下)

如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为。

2026-10-10 14:21:00 77

原创 linux 进程信号 (上)

用快递来类比信号处理:基本结论:样例代码:运行过程:signal系统函数::信号编号:函数指针,表示更改信号的处理动作,当收到对应的信号,就回调执行handler方法验证Ctrl+C本质是SIGINT(2号信号):运行后按Ctrl+C,进程不退出,而是执行自定义handler说明信号处理是自己处理生活例子与Ctrl+C信号处理过程结合:注意:信号:进程之间事件异步通知的一种方式,属于软中断。查看信号:宏定义(在中):编号34以上的是实时信号,本章只讨论编号34以下的信号详细说明

2026-10-10 14:18:24 423

原创 MySQL内置函数

在日常的数据库开发中,熟练使用MySQL内置函数可以极大地提高开发效率。本文将根据学习资料,系统总结MySQL中常用的,并结合具体的实战案例进行演示。

2026-10-09 10:55:48 106

原创 linux 进程间通信

参考 Linux 2.6.18 内核源码。信号量主要用于同步和互斥。

2026-10-04 17:46:51 318

原创 linux System V 相关知识

shmget → shmat → 读写内存 → shmdt → shmctl(IPC_RMID)shmget:创建或获取共享内存。shmat:把共享内存映射到当前进程。shmctl:查询、设置、删除共享内存。shmdt:解除映射,通常和shmat成对出现。共享内存最大的优点是快,因为数据不需要在进程之间复制;最大的缺点是需要自己处理同步。如果你需要高性能进程间通信,System V 共享内存仍然是非常经典、非常值得掌握的方式。

2026-10-04 17:27:36 343

原创 Mysql 基本查询

该文档系统讲解了 mysql 中表的增删改查(crud)操作,即 create(创建)、retrieve(读取)、update(更新)、delete(删除),并附带大量案例与语法说明。以下按章节梳理核心内容。

2026-09-26 23:04:42 333

原创 linux 进程间通信

管道是 Unix/Linux 中最古老的进程间通信(IPC)方式之一,本质是,通过文件描述符暴露给进程,使用方式与文件一致,体现了“Linux 一切皆文件”的思想。管道分为和。

2026-09-24 14:16:16 373

原创 linux库

特性静态链接动态链接链接时机编译链接时程序加载时重定位类型编译重定位(静态重定位)运行重定位(动态地址重定位)可执行文件大小大(包含库代码)小(只包含函数入口地址表)内存占用每个进程一份多进程共享一份更新维护需重新编译整个程序只更新库文件运行速度快略慢(需动态解析)依赖无依赖动态库存在动态链接的代价:牺牲了一定的性能和程序加载时间。动态链接的价值:更高效利用磁盘空间和内存资源,方便代码更新维护,实现了二进制级别的代码复用。

2026-09-22 14:13:20 392

原创 STM32跑马灯实现和部分源码分析

单灯点亮单灯闪烁跑马灯GPIOAGPIOBGPIOF等本质是宏,最终展开为指向// 端口配置低寄存器// 端口配置高寄存器// 输入数据寄存器// 输出数据寄存器// 位设置/清除寄存器// 位复位寄存器// 配置锁定寄存器基地址由PERIPH_BASE + APB2PERIPH_BASE + 端口偏移计算得到。通过结构体指针访问成员,就是直接读写对应物理地址的寄存器。

2026-09-20 13:22:05 262

原创 Linux 库制作与原理

这份文档讲解Linux下的制作、使用,ELF目标文件格式、编译链接、程序加载、虚拟地址空间、动态链接原理,配套gcc选项、Makefile示例、调试命令。

2026-09-18 16:01:52 330

原创 Linux 文件系统

特性硬链接软链接inode号和源文件相同全新独立inode跨分区不支持支持链接目录用户不能创建,系统..是硬链接支持删除源文件硬链接仍然可用变成无效悬空链接本质多个目录项指向同一个inode保存路径字符串的独立文件。

2026-09-17 12:59:02 240

原创 MySQL 表约束

约束作用关键点not null禁止字段为空开发尽量多用,NULL无法参与运算default设置字段默认值插入省略字段自动填充默认值comment字段注释仅说明,show create table查看zerofill数字零填充只改变展示,存储不变主键,唯一且非空一张表仅一个主键,可复合主键自增长整数+索引,一张表最多一个unique key唯一键,值不能重复允许NULL,可设置多个外键,表关联约束定义在从表,引用主表主键/唯一键。

2026-09-17 12:51:29 346

原创 Linux 缓冲区

缓冲区本质上是内存当中的一块存储空间,分为输入缓冲区、输出缓冲区。我们操作磁盘、显示器这类外设,如果每输出一个字节就调用一次系统调用,就要频繁发生「用户态 ↔ 内核态」切换,CPU开销巨大,性能很差。缓冲区就是用来解决这个矛盾:CPU速度 >> 内存速度 >> 磁盘/外设速度把要输出的数据先暂存到内存缓冲区,攒够一定量,再一次性调用系统调用交给内核,减少系统调用次数,让高速CPU和低速外设可以高效协同工作。用户层缓冲区:C标准库(libc)提供,也就是使用的缓冲区,这是本文重点。内核缓冲区。

2026-09-11 13:50:47 326 3

原创 Linux 重定向

重定向:不改变用户代码,改变数据流向。本该输出到显示器的数据,输出到文件;本该从键盘读数据,改成从文件读取。:输出重定向,截断式,,清空文件,把命令输出写入文件。>>:追加重定向,,把输出追加到文件末尾,不覆盖原有内容。:输入重定向,,命令不再从键盘读取,从文件读取数据。缓冲区坑(printf库函数重定向)输出到终端:stdout行缓冲,遇到\n自动刷新;重定向到普通文件:stdout切换成全缓冲。没有换行、缓冲区没满,程序直接close,数据留在用户缓冲区,文件看不到内容。

2026-09-10 22:30:32 338

原创 汉诺塔问题

汉诺塔(Tower of Hanoi)是学习最经典的入门算法案例,它充分体现把大问题拆解为规模更小的同类子问题的解题思路优快云博…。

2026-09-09 14:09:01 43

原创 MySQL 数据类型

整型:根据业务范围选择,尽量避免unsigned,不够用直接升级更大类型。小数:普通展示用float;金额财务必须使用decimal。字符串:定长用char;长短不一用varchar,注意编码带来最大字符限制。时间:只存日期用date;完整时间用datetime;timestamp有自动更新时间特性。enum用于单选,set用于多选;集合查询记得使用。

2026-09-07 18:20:46 329

原创 MySQL 数据库与数据表操作

查看当前所有数据库连接(用户、主机、操作的库、执行命令),用于排查慢查询、异常登录、连接数满等问题。可一次性删除多张表(逗号分隔),删除后表结构和全部数据一起清除。级联删除:库内所有表、数据全部丢失,生产环境严禁随意执行。高危操作:删除字段后该列所有数据全部丢失。,需退出 MySQL 客户端后执行。参数备份时,恢复前需手动先创建并。用于给字段添加注释,方便后期维护。是条件执行语句,不是普通注释。:控制比较、查询、排序的规则。:决定文字的存储编码,如。,确定在哪个库下操作。只改字段的类型、长度,

2026-09-07 18:18:25 600

原创 mysql入门

很多同学初学的时候会疑惑:数据直接存文件里不行吗?比如txt、csv保存信息。数据库就是为了解决这些痛点诞生的,数据主要存放在磁盘,部分热点数据放在内存,高效完成数据的增删改查,数据库能力也是后端开发非常核心的基本功。

2026-09-03 17:24:39 182

原创 linux 自制shell

下面是版本,没有修改任何一行源码,只追加注释,缩进和课件文档完全对齐。while0。

2026-09-02 20:03:47 211

原创 进程程序切换

exec不会创建进程,只替换当前进程地址空间;要新进程必须先fork;exec成功之后,后面代码全部丢弃,不会执行;只有出错才返回‑1;带p的函数依靠PATH环境变量找程序,不用写完整路径;不带p必须写绝对路径;内建命令不能fork子进程执行,会失效;外部命令交给子进程exec执行;退出码:子进程exit(n),父进程wait拿到status,通过提取退出码;异常终止看信号编号;六个exec函数,只有execve是系统调用,其余都是库函数封装。

2026-09-02 17:13:51 363

原创 Python 基础语法

a = 10 # 定义print(a) # 读取a = 20 # 修改b = a # 变量间赋值。

2026-08-24 18:02:59 194

原创 进程地址空间

进程地址空间是操作系统为每个进程提供的独立虚拟内存视图,通过页表映射到物理内存,实现了内存保护、按需分配、进程隔离和高效管理,是现代操作系统稳定与安全的基础机制。

2026-08-20 16:18:29 203

原创 进程优先级与调度机制

查找最合适调度进程的时间复杂度为常数 O(1)不随进程数量增加而增加时间成本通过位图快速定位非空队列通过指针交换完成活动/过期队列切换模块核心要点进程优先级调度概念竞争性、独立性、并行(多CPU)、并发(单CPU切换)上下文切换保存/恢复CPU寄存器状态O(1)调度活动/过期队列 + 位图 + 指针交换,常数时间复杂度环境变量全局属性可继承,通过getenv/export操作,以字符指针数组组织虚拟地址空间所有地址均为虚拟地址,由mm_struct管理,页表映射到物理内存VMA组织。

2026-08-11 13:21:17 186

原创 linux进程

2026-07-30 18:50:56 239

原创 Makefile模板

新增/删除C语言源文件,不用修改Makefilewildcard是Makefile内置函数,作用是遍历当前目录,匹配全部后缀为.c的源码文件,全部存入变量SRC中。Makefile字符串替换语法:把SRC里所有文件的后缀.c统一替换成.o,也就是编译产生的中间目标文件。自定义变量,指定最后打包生成的可执行程序名称,可随意修改。通用性极强:单目录多文件C项目直接套用,修改BIN变量就能适配不同项目;自动化管理:增减.c源码无需改动脚本;增量编译:只编译被修改过的文件,节省编译时间;极简易维护。

2026-07-27 22:05:16 238

空空如也

空空如也

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

TA关注的人

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