<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wit_732的博客]]></title><description><![CDATA[人生似水岂无涯，浮云吹作雪，世味煮成茶。]]></description><link>https://blog.youkuaiyun.com/wit_732</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wit_732]]></copyright><item><title><![CDATA[Linux进程间通信 —— (三) 信号量]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/122437630</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/122437630</guid><author>wit_732</author><pubDate>Wed, 12 Jan 2022 17:05:39 +0800</pubDate><description><![CDATA[Linux进程间通信 —— (三) 信号量
一、概述
在多任务操作系统中，多个进程/线程会同时运行。多个任务可能会为了完成某个目标而相互协作，这样就形成了任务之间的同步关系。同样，不同任务之间为了争夺有限的系统资源(硬件/软件资源)会进入竞争状态，这就是任务之间的互斥关系。
任务之间的互斥与同步关系存在的根源在于临界资源。
下面先来看两个概念：临界资源和临界区。
临界资源是指在同一个时刻只允许有限个(通常只有一个)任务访问(读)或修改(写)的资源。
临界资源包括：硬件资源(处理器、内存、存储器、以及其外外围]]></description><category></category></item><item><title><![CDATA[Linux进程间通信 - (二) 信号]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/122212080</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/122212080</guid><author>wit_732</author><pubDate>Wed, 29 Dec 2021 17:16:50 +0800</pubDate><description><![CDATA[Linux进程间通信 - (二) 信号
1. 概述


信号是在软件层面上对中断机制的一种模拟。在原理上，一个进程收到一个信号与处理器收到一个中断请求可以说在某种程度上是一样的。


信号是异步的：一个进程不必通过任何操作来等待信号的到达。事实上，进程也不知道信号什么时候会到达。


信号可以直接进行用户空间进程和内核进程之间的交互，内核进程也可以利用它来通知用户进程发生了那些系统事件。


信号可以在任何时候发给某一进程，而无需知道该进程的状态。如果该进程当前并未处于执行态，则该信号就由内核保存起来，直到]]></description><category></category></item><item><title><![CDATA[Linux进程间通信 - (一) 管道]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/122163380</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/122163380</guid><author>wit_732</author><pubDate>Mon, 27 Dec 2021 09:57:08 +0800</pubDate><description><![CDATA[Linux进程间通信 - (一) 管道
一、概述
管道是Linux进程间通信的一种方式，它把一个程序的输出直接连接到另一程序的输入。Linux的管道主要包括两种：无名管道和有名管道。
无名管道

只能用于具有亲缘关系的进程之间的通信(如父子进程或者兄弟进程之间)。
是一个单工的通信模式，具有固定的读端和写端。
管道也可以看成一种特殊的文件，对于它的读写也可以使用普通的read()、write()等函数。但是它不属于任何文件系统，并且只存在于内存中。

有名管道


它可以使互不相关的两个进程实现彼此通信。
]]></description><category></category></item><item><title><![CDATA[Linux进程间通信]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/122163204</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/122163204</guid><author>wit_732</author><pubDate>Sun, 26 Dec 2021 23:55:50 +0800</pubDate><description><![CDATA[Linux进程间通信
一、概述
我们知道，每个进程创建时有自己独立的4GB空间，有自己的代码段、数据段、堆栈等资源。很多时候，不同的进程间需要交换数据，即相互通信。那么又该通过哪些机子来进行进程间的通信呢？下面我们来一起来看看进程间通信的一些机制。
Linux平台的进程间通信是从Unix平台继承而来，同时也继承了不同流派的一些进程间通信的优点，这样就形成了Linux自己的进程间通信的方式。如下图所示：

二、进程间通信方式
现在Linux中应用比较广泛的进程间通信方式主要有一下几种

无名管道(pipe)及]]></description><category></category></item><item><title><![CDATA[C语言 -- 常见字符串处理函数总结]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/122133704</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/122133704</guid><author>wit_732</author><pubDate>Fri, 24 Dec 2021 19:53:03 +0800</pubDate><description><![CDATA[C语言常用字符串函数
文章目录C语言常用字符串函数一、基础知识1. 常量指针与指针常量2. 字符串的存储区3. 字符串长度二、字符串处理函数1. 字符串长度计算2. 字符串复制3. 字符串拼接4. 字符串比较函数5. 格式化字符6. 字符串查找7. 字符串分割三、总结
一、基础知识
为了更好的理解后面提到的一些字符串处理函数，我们先补充一些基础知识。假如你已经掌握，可以直接跳过。
1. 常量指针与指针常量
先来看一个例子：
int a = 100; const int * p = &amp;a;  //常量]]></description><category></category></item><item><title><![CDATA[wpa_supplicant中wifi断连相关的reason code含义]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/121900507</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/121900507</guid><author>wit_732</author><pubDate>Mon, 13 Dec 2021 10:50:31 +0800</pubDate><description><![CDATA[源文档

]]></description><category></category></item><item><title><![CDATA[Linux文件操作 --- （二）文件I/O]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/121793574</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/121793574</guid><author>wit_732</author><pubDate>Wed, 08 Dec 2021 16:57:39 +0800</pubDate><description><![CDATA[文件操作 - 文件I/O
文章目录文件操作 - 文件I/O文件I/O一、基本概念1. 文件2. 虚拟文件系统（VFS）3. 文件描述符二、编程接口文件的打开和关闭文件的打开 open()文件的关闭close()文件读写文件读read()文件写write()文件的定位文件定位lseek()文件锁
文件I/O
在上一篇文章Linux文件操作之标准I/O简单讲了文件操作标准I/O的一些基本知识，这里我们继续来看LInux下文件操作的又一利器：文件I/O
一、基本概念
1. 文件
上一小节，我们讲到了Linux是基]]></description><category></category></item><item><title><![CDATA[Linux文件操作 ---（一）标准I/O]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/121584189</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/121584189</guid><author>wit_732</author><pubDate>Sat, 27 Nov 2021 22:08:28 +0800</pubDate><description><![CDATA[Linux文件操作
一、基础概念
1. 文件的概念
文件：一组相关数据的有序结合。
文件名：这组数据集合的名称。
文件分类：

ASCALL码文件
二进制文件
目录
字符设备
块设备
套接口
符号链接
…

Linux的哲学是“Linux下一切皆文件”。从上面我们也可看出，除了常规的ASCALL码和二进制文件，其他的如字符设备，套接字等在Linux下都被看作文件。因此学习Linux文件操作不可为不重要。
这样来看的话，学习Linux下的文件操作就显得很重要和必须了。
2. 系统调用
除此之外，还需要补充一点]]></description><category></category></item><item><title><![CDATA[Linux系统将WiFi配置为AP模式 --- hostapd 和 udhcpd的使用说明]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/121038477</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/121038477</guid><author>wit_732</author><pubDate>Fri, 29 Oct 2021 17:04:25 +0800</pubDate><description><![CDATA[文章目录hostapd一、功能说明二、配置文件hostapd.conf1. 配置WiFi 热点为无密码模式2. 配置WiFi热点为加密模式三、hostapd的启动udhcpd一、功能说明二、配置文件udhcpd.conf的使用三、实例说明四、使用示例总结
hostapd
一、功能说明
hostapd是Linux系统上的一个带加密功能的无线接入点(access point : AP)程序。hostapd能够使得无线网卡切换为master模式，模拟AP（路由器）功能，作为AP的认证服务器，负责控制管理stati]]></description><category></category></item><item><title><![CDATA[C语言拾锦 --- 对指定的结构体数组成员进行初始化]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/120511667</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/120511667</guid><author>wit_732</author><pubDate>Mon, 27 Sep 2021 16:56:17 +0800</pubDate><description><![CDATA[对指定的结构体数组成员进行初始化
概述
今天在看iwlib库(一个开源的基于wext的wifi驱动的管理的库，可以支持我们在应用层面对wifi进行一些方便的操作)代码的时候发现了一种比较有用的对结构体结构体数组成员的初始化的方法，之前没有遇到过。第一次见有点儿新奇，在这里做一下记录。先贴出代码(对源代码进行了一定的简化)：
/* Describe how a standard IOCTL looks like. */
struct ty_ioctl_description
{
    __u8    hea]]></description><category></category></item><item><title><![CDATA[C语言基础 --- 结构体中的.和-＞的区别与联系]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/120253187</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/120253187</guid><author>wit_732</author><pubDate>Sun, 12 Sep 2021 18:01:39 +0800</pubDate><description><![CDATA[C语言基础 — 结构体中的.和-&gt;的区别与联系
1. 基本功能
这两种方式其实都是结构体成员运算符，两者都具有从左到右的结合性。不同的是：

'.'是结构体引用成员变量的方式。
'-&gt;' 是结构体指针引用成员变量的方式。

2. 联系
那么既然有了’.‘这个符号，为什么还要再弄个’-&gt;‘符号呢？这不是很麻烦吗？然而，事实并非如此，’-&gt;'恰巧是为了我们更好的使用结构体这一有利的工具。请看下面这个小例子。
#include &lt;stdio.h&gt;
struct ptr {
	i]]></description><category></category></item><item><title><![CDATA[C语言 --- 一个简单内存池模型的实现]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/119305157</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/119305157</guid><author>wit_732</author><pubDate>Sun, 01 Aug 2021 22:57:10 +0800</pubDate><description><![CDATA[C语言 — 简单的内存池实现
内存时原理说明
模拟C语言内存分配函数malloc()和free()，我们这里也定义两个函数alloc和afree，进而模拟C语言内存的分配的实现。

定义一个大的字符数组，模拟一块内存池。
让alloc对一个大的字符数组allocbuf中的空间进行分配，该数组是alloc和afree两个函数私有的数组。
由于alloc和afree处理的对象是指针而不是数组下标，因此，其他函数无需知道该数组的名字，这样可以在alloc和afree处理的对象是指针而不是数组下标，因此，其他函数无]]></description><category></category></item><item><title><![CDATA[DHCP 原理以及IP获取过程]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/119190571</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/119190571</guid><author>wit_732</author><pubDate>Wed, 28 Jul 2021 21:36:43 +0800</pubDate><description><![CDATA[DHCP 原理以及IP获取过程
一、概述
DHCP 基本定义
HDCP(Dynamic Host Configuration Protocol，动态主机配置协议)。是一个局域网的网络协议，使用UDP协议工作， 主要有两个用途：给内部网络或网络服务供应商自动分配IP地址，给用户或者内部网络管理员作为对所有计算机作中央管理的手段。DHCP有3个端口，其中UDP67和UDP68为正常的DHCP服务端口，分别作为DHCP Server和DHCP Client的服务端口；546号端口用于DHCPv6 Client，而]]></description><category></category></item><item><title><![CDATA[C语言 --- Register 寄存器变量解析]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/117606014</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/117606014</guid><author>wit_732</author><pubDate>Sat, 05 Jun 2021 21:40:11 +0800</pubDate><description><![CDATA[Register 寄存器变量
定义
register声明告诉编译器，它所申明的变量在程序中使用频率较高。其思想是：将register变量房子机器的寄存器中，这样可以使程序更小、执行速度更快。但是编译器可以忽略此选项。
用法
register 只适用于自动变量以及函数的参数。

register申明变量的形式如下：

register int a;
int register b;

这两种形式都是可以的，但第一种会简单明了一些。

register申明函数参数

int func(register char ]]></description><category></category></item><item><title><![CDATA[数据结构与算法 --- 嵌入式程序员必须掌握的核心知识总结]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/117601646</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/117601646</guid><author>wit_732</author><pubDate>Sat, 05 Jun 2021 17:52:05 +0800</pubDate><description><![CDATA[数据结构预算法核心知识点总结
概述
最近有看一些大佬的专栏，受益匪浅。深刻的觉察到我们要想成为一个伟大的程序员，或者说小一点，成为一个厉害的程序员，基础知识是核心竞争力也是我们不断向上提升个人能力的基石。
所以最有又对一些基础知识进行了总结和回顾，并逐渐开始吧他们记录在这里。
数据结构与算法
本来整理的是思维导图的形式，但是这个博客并不允许直接导入思维导图。所以只能将他们截图，贴在这里，不知道是否影响观看。
申明，这里本人只做了核心知识点的提要。当然肯定也会有遗漏或不足的地方，欢迎批评指正。

总结
当然了]]></description><category></category></item><item><title><![CDATA[RTOS 基础知识]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/117200376</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/117200376</guid><author>wit_732</author><pubDate>Sun, 23 May 2021 20:59:54 +0800</pubDate><description><![CDATA[RTOS
一、定义与特点
最近两年RTOS操作系统在嵌入式领域越来越流行和受欢迎了，身边也有很多人在RTOS上构建项目。所以很有必要，来了解一下RTOS操作系统到底什么，这个操作系统有哪些特点，以及我们如何使用它。
RTOS全称为：Real Time OS，就是实时操作系统，强调的是：实时性。实时操作系统又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作，硬实时系统不允许超时，在软实时里面处理过程超时的后果就没有那么严格。
在实时操作系统中，我们可以把要实现的功能划分为多个任务，每个任务负责实现其中]]></description><category></category></item><item><title><![CDATA[Linux驱动开发 --- 设备树]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/116201417</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/116201417</guid><author>wit_732</author><pubDate>Tue, 27 Apr 2021 15:21:39 +0800</pubDate><description><![CDATA[设备树
文章目录设备树1. 设备树由来2. 设备树的目的3. Linux设备树的使用
1. 设备树由来
在Linux内核源码引入内核源码的ARM体系结构引入设备树之前，相关的BSP代码中充斥了大量的平台设备代码(platform device)。而这些代码大多是重复的、杂乱的，这就给内核移植带来了巨大的困难。以至于Linux之父Linus怒斥ARM社区。
为了解决此问题，设备树就被引用到Linux中来。(需要注意的是设备树并不是Linux的首创)
2. 设备树的目的
设备树是一个描述硬件的数据结构。它也不能]]></description><category></category></item><item><title><![CDATA[WIFI快连(一键配网)原理分析及优化建议]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/115709866</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/115709866</guid><author>wit_732</author><pubDate>Wed, 14 Apr 2021 21:27:41 +0800</pubDate><description><![CDATA[EZ配网说明
文章目录EZ配网说明@[toc]EZ配网基本流程说明配网流程EZ配网原理组播广播EZ配网优缺点及优化建议优点缺点优化建议
EZ配网基本流程
说明
EZ配网也叫wifi快连，目前市面上EZ配网的功能需要设备支持monitor模式(也称为混杂模式)，即设备应当具有监听当前环境中空气包的能力。并且设备可以对相关的报文进行筛选，并解析出设备中特定信息用于完成配网。
目前涂鸦EZ配网一般流程为：APP(一般为用户手机端)端发送带有AP ssid和AP passwd以及token的广播包或组播包。同时设备]]></description><category></category></item><item><title><![CDATA[802.11无线通信帧分类及功能说明]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/115417039</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/115417039</guid><author>wit_732</author><pubDate>Sat, 03 Apr 2021 16:03:54 +0800</pubDate><description><![CDATA[802.11帧分类
1. 数据帧
数据数据包的作用是用来携带更高层次的数据(如IP数据包，ISO7层协议)。它负责在工作站之间传输数据。
2. 管理帧
管理数据包控制网络的管理功能管理帧负责监督，主要用来加入或退出无线网络，以及处理接入点之间连接的转移事宜。

信标帧(Beacons): 在无线设备中，定时依次按指定间隔发送的有规律的无线信号(类似心跳包)，主要用于定位和同步使用
解除认证(Deauthentication)数据包
Probe(request and response)
Authentica]]></description><category></category></item><item><title><![CDATA[udev和驱动的自动加载]]></title><link>https://blog.youkuaiyun.com/wit_732/article/details/115034304</link><guid>https://blog.youkuaiyun.com/wit_732/article/details/115034304</guid><author>wit_732</author><pubDate>Sat, 20 Mar 2021 20:43:16 +0800</pubDate><description><![CDATA[udev和驱动的自动加载
一、概述
在一般的驱动编写时，我们可以通过加载模块来向系统添加设备，也可以通过移除模块来删除设备。但是很多时候我们会设想到一种更加智能的的场景，即当设备被添加到系统后，驱动可以自动加载，这对于实际的可支持热插拔的硬件来说更有必要。比如说，我们插入一个USB无线网卡，那么对应的驱动就应该自动加载，而不是由用户来手动加载。要想实现这一工能，我们就需要依赖一个工具 — udev。在大多数嵌入式系统中通常使用mdev，其功能比udev要弱很多，同样的我们也可以移植udev到嵌入式系统上。
]]></description><category></category></item></channel></rss>