自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 libevent源码深度剖析之源代码组织结构

第一章 源代码组织结构Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、对系统I/O多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于libevent的两个实用库等几个部分,有些部分可能就是一个源文件。源代码中的test部分就不在我们关注的范畴了1)头文件...

2020-04-28 20:35:25 378

原创 【ART-Pi学习FreeRTOS】添加串口打印

ART-Pi DEBUG串口使用的是UART4,分别为:PI9和PA0。

2023-01-10 23:26:38 355

原创 【ART-Pi学习FreeRTOS】使用STM32CubeIDE搭建开发环境

使用STM32CubeIDE搭建ART-Pi开发环境

2023-01-10 23:08:16 734

原创 shell中常用的命令—xargs命令

文章目录shell中常用的命令—xargs命令1.1. xargs的功能1.2. xargs存在的意义:1.3. xargs用法1.4. 实例2. find命令结合2.1. find和cp2.2. find和rm2.2.1. sh -cshell中常用的命令—xargs命令1.1. xargs的功能xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具xargs可以将管道或标准输入数据转换成命令行参数,也能够从文件的输出中读取数据xargs也可以将单行或多行文本输入转换为其他格式(多

2021-07-21 19:03:07 1818

原创 shell push和popd

文章目录1. shell push和popd1.1. push1.2. popd1.3. 应用场景1. shell push和popd1.1. push➜ ~ dirs -v #查看栈的情况0 ~➜ ~ pushd one #one入栈~/one ~ -1➜ one pushd two #two入栈~/one/two ~/one ~ -1➜ two pushd three #three入栈~/one/two/three ~/one/two ~/o

2021-07-19 19:41:19 1010

原创 C++Lambda表达式

文章目录1. Lambda表达式1.1. 声明Lambda表达式1.2. 捕获外部变量1.2.1. 值捕获1.2.2. 引用捕获1.2.3. 隐式捕获1.2.4. 混合方式1.3. Lambda表达式的参数2. C++11 std::function2.1. 头文件2.2. 作用2.3 std::function 的使用有多态和万总归一的感觉,程序栗子如下:3. 实例代码1. Lambda表达式C++11的一大亮点就是引入了Lambda表达式。利用Lambda表达式,可以方便的定义和创建匿名函数。对于C

2021-07-19 19:32:12 1113 2

原创 Linux 读取JSON字符串

文章目录1. C++ json读写1.1. rapidjson1.2. JsonCpp1.2.1. 安装和编译2. C语言使用CJSON2.1. 编译和安装3. shell读写json3.1. JQ实例13.2. JQ实例23.2. shell命令1. C++ json读写1.1. rapidjsongit clone https://github.com/Tencent/rapidjson.git待续1.2. JsonCpp1.2.1. 安装和编译下载http://sourcefor

2021-07-15 16:30:31 1910

原创 Linux动态库总结

文章目录1. Linux编译介绍2. 制作动态库和静态库2.1. 示例代码2.2. 制作静态库2.3. 制作动态库2.3.1. **第一种:没有指定soname**2.3.2. **第一种:指定soname**3. 动态库的版本3.1. linux下的动态库命名规范3.1.1. **共享库本身的文件名(Real Name)**3.1.1. **共享库的(so-name)**3.1.1. **共享库的链接名(Link Name)**4. 动态库升级4.1 **共享库,小版本升级,即接口不变**4.2 **

2021-07-15 11:08:37 545

原创 syslog的使用

文章目录1. syslog的配置1.1. syslog简介1.1.1. linux中日志的类型1.1.2.  facility1.1.3. action(动作)1.1.4. 日志定义格式举例1.1.5. 重启rsyslog服务1.2. syslog服务器1.3. logrotate:系统中进行日志滚动(切割)的工具1.4. rsyslog的配置文件1.5. 举例说明1.5.1. 添加配置文件1.5.2. 重启rsyslog2. syslog在shell脚本中的应用3. syslog在C/C++中的应用1.

2021-07-13 13:08:40 2544

原创 shell获取进程信息

文章目录1. basename和dirname提取文件名1.1. basename1.2. dirname2 获取当前进程的绝对路径3. shell参数获取4. 例子1. basename和dirname提取文件名1.1. basenamebasename [pathname] [suffix]basename [string] [suffix]suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。$ basename /User

2021-07-09 11:16:26 1366

原创 LeetCode-单链表

1. 单链表的删除1.2 第一类删除类 01. 删除链表中的节点 2. 删除中间节点 3. 删除链表的节点 4. 链表的中间结点 5. 移除链表元素 6. 删除排序链表中的重复元素 II 7. 删除排序链表中的重复元素 8. 删除链表 M 个节点之后的 N 个节点 9. 从链表中删去总和值为零的连续节点 10. 移除重复节点[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GDbkQ9d9-1625202948819

2021-07-02 13:16:31 127

原创 使用Logger命令添加到Linux日志文件

使用Logger命令添加到Linux日志文件使用Logger命令将消息添加到Linux系统日志文件,logger命令是util-linux软件包的一部分,因此请不要安装它。下面给到大家一些示例:1.1. 简单使用$ logger Welcome to OSTechNix $logger "Welcome to OSTechNix blog"上面的命令会将条目“ Welcome to OSTechNix”添加到系统日志文件中。让我们使用“ tail”命令验证消息是否已添加:$ tail -l

2021-07-01 10:31:43 624

原创 Linux udev规则总结

文章目录1. UDEV介绍1.1. udev概要1.2. udev运行方式1.3. udev系统架构:2. udevadm 命令介绍2.1. udevadm主命令2.2. 命令应用:2.2.1. 查看设备信息:2.2.2. 监控设备事件:2.2.3. 模拟一个udev事件2.2.4. 接收内核发送来的设备事件2.2.5. 查看udev事件队列3. udev规则3.1 简单USB例子3.1.1. 规则:automount-usb.rules3.1.2. 脚本:mount-usb3.1.3. 测试规则是否合法1

2021-06-30 15:04:49 6402 1

原创 LeetCode 链表的基本操作

1. 链表查找

2021-06-28 11:54:41 94

原创 大话数据结构(5.1)---二叉排序和二叉平衡树

文章目录1. 二叉树排序1.1 二叉树查找1.2. 二叉树插入1.2.1. 插入的节点为根节点1.2.1. 插入的节点为左孩子1.2.1. 插入的节点为右孩子1.2. 二叉树删除1.2.1. 删除的节点只有一个子树1.2.2. 删除的节点有作业两个节点1. 二叉树排序二叉排序树(Binary Sort Tree),又称二叉查找树。它或者是一颗空树。或者是具有下列性质的二叉树。若它的左子树不空,则左子树上全部节点的值都小于它的根节点的值。若它的右子树不空,则右子树上全部节点的值都大于它的根节点的值

2021-06-24 17:51:15 330

原创 大话数据结构(六)---图的简介

第一章 图的定义图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合(有穷非空),E是图G中边的集合(可以为空)图是一种较线性表和树更加复杂的数据结构,在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关1.1 各种图定义无向边: 若顶点vivi到vjvj之间的边没有方向,则称这条边为无向边(Edge),用无序偶对(vivi,vjvj)来表示,如果图中任意两个顶点之间的边都是无向边,...

2021-06-23 13:30:55 1315

原创 大话数据结构(五)---树和二叉树

一、树的定义:二、二叉树2.1 满二叉树2.2 完全二叉树(Complete Binary Tree):三、二叉树的性质四、二叉树的存储1、顺序存储结构2、链式存储结构五、二叉树的遍历六、线索二叉树6.1 产生背景6.2 线索化6.3 线索二叉树结点数据结构6.4 中序遍历建立线索二叉树一、树的定义1.1 定义树(Tree)是n(n>=0)个节点的有限集,n=0时称为“空树”。在任意一棵非空树中:有且仅有一个特定的称为根(root

2021-06-23 13:07:16 303

原创 5. C++智能指针

aaaa

2021-06-23 09:34:00 85

转载 4. C++中的自动类型推导

C++中的自动类型推导1.1. auto关键字auto 关键字基本的使用语法如下:auto name = value;name 是变量的名字,value 是变量的初始值。注意:auto 仅仅是一个占位符,在编译器期间它会被真正的类型所替代。或者说,C++ 中的变量必须是有明确类型的,只是这个类型是由编译器自己推导出来的。1.1.1. auto 的高级用法auto 除了可以独立使用,还可以和某些具体类型混合使用,这样 auto 表示的就是“半个”类型,而不是完整的类型。请看下面的代码:int

2021-06-23 09:28:42 282

原创 3. C++四大函数

文章目录3. C++四大函数3.1. C++构造函数3.1.1. 构造函数是干什么的3.1.2. 构造函数的种类3.1.3. 拷贝构造函数三种情况3.1.4. 构造函数的初始化3.1.5. 构造函数的调用3.1.6. 浅拷贝与深拷贝3.2 拷贝构造函数和赋值运算符3.2.1 拷贝构造函数和赋值运算符3.2.2 何时调用3. C++四大函数C++里类的四大函数你一定知道吧,它们是构造函数、析构函数、拷贝构造函数、拷贝赋值函数。C++11 因为引入了右值(Rvalue)和转移(Move),又多出了两大函数:

2021-06-22 09:12:59 1406

原创 2. 如何写出一个好类

2 如何写出一个好类2.1finalC++11 新增了一个特殊的标识符“final”(注意,它不是关键字),把它用于类定义,就可以显式地禁用继承,防止其他人有意或者无意地产生派生类。无论是对人还是对编译器,效果都非常好,我建议你一定要积极使用。class DemoClass final // 禁止任何人继承我{ ... };在必须使用继承的场合,建议你只使用 public 继承,避免使用 virtual、protected,因为它们会让父类与子类的关系变得难以捉摸,带来很多麻烦。当

2021-06-20 20:55:14 282

原创 C++程序生命周期

1. C/C++ 程序的生命周期预处理阶段预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如hello.c中第一行的#include<stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中,结果就得到了另一个C程序,通常是以.i作为文件扩展名。g++ –E hello.cpp -o hello.i //将hello.c预处理输出hello.i编译阶段编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一

2021-06-20 17:54:04 1047

原创 大话数据结构(四)---栈

3. 栈3.1 栈的介绍3.1.1. 栈的数据结构3.1.2. 栈的顺序存储3.1.3. 两栈共享空间思路:他们是在数组的两端,向中间靠拢top1和top2是两个栈的栈顶指针, 只要两个指针不碰头就可以​ 图解3.1.4. 栈的链式存储​ 3.1.5 栈的顺序存储和链式存储区别​ 如果栈使用过程中元素变化不可预测, 有时候小, 有时候非常大, 那么推荐用栈的链式存储。 如果一直栈的的元素变化在可控范围内, 推荐使用栈的顺序存储。3.2 顺序栈3.2.2

2021-06-18 16:47:01 76

原创 大话数据结构(三)---队列

2. 队列2.1. 队列简介队列也分成两种:静态队列(数组实现)动态队列(链表实现)队列常用三个判断因式队满判断因式:(rear + 1) % QueueSize == front队空的判断因式:rear == front通用队长计算因式:(QueueSize - front + rear) % QueueSize2.2. 静态队列typedef struct{ data_t data[MAXSIZE]; int front;//队头位置 int rear;//队尾位置

2021-06-18 16:46:02 149

原创 大话数据结构(二)---链表

文章目录1. 链表1.1 简介1.2 概念1.3 单链表1.3.1. 创建单链表1.3.1. 插入新节点1.3.2. 遍历链表1.3.2. 删除链表1.3.3. 销毁链表1.3.4. 单链表反序1.3.5. 寻找最大元素对1.4. 双链表1.4.1. 双链表的创建1.4.2. 双链表的插入1.4.2. 双链表的删除1.4.2. 双链表的遍历1.4.2. 双链表的销毁2. 队列2.1. 队列简介2.2. 静态队列2.2.1. 创建队列2.2.2. 队列插入2.2.3 求队列长度2.3 链式队列2.3.1.

2021-06-18 16:43:41 248

原创 大话数据结构(一)--排序

文章目录1. 排序--快速排序算法(Quicksort)1.1 定义1.2. 基本思想1.3. 步骤1.4. C语言实现代码分析:1.2 那么我们该如何选取枢纽元呢?2 归并排序2.1 基本思想2.2 合并相邻有序子序列2.3 C语言代码实现3. 堆排序3.1 堆介绍3.2. 算法步骤3.3. 算法解析3.3.1 代码段一3.3.2 代码段二4. 冒泡排序4.1 介绍4.2 算法步骤4.3 C语言实现5. 选择排序5.1 选择排序介绍![在这里插入图片描述](https://img-blog.csdnimg

2021-06-17 18:29:21 796

原创 USB设备驱动简介

1. USB拓扑结构设备、配置、接口和端点1.2 设置、配置、接口、端点 在 USB 设备的逻辑组织中,包含设备、配置、接口和端点 4 个层次。 每个 USB 设备都提供了不同级别的配置信息,可以包含一个或多个配置,不同的配置使设备表现出不同的功能组合(在探测/连接期间需从其中选定一个) ,配置由多个接口组成。 每个配置中可以有多个接口,而设备接口是端点的汇集(collection) 。例如 USB 扬声器可以包含一个音频接口以及对旋钮和按钮的接口。一个配置中的所有接口可...

2021-03-25 13:07:29 1206

原创 C++中char *和char []的区别

C++中char *和char []的区别例如如下代码:#include<iostream>using namespace std;int main(){ char *p1 = "abcd"; char p2[] = "1234"; return 0;}这二者的区别还在于:p1是一个指针变量,有一块内存存储它,它的内容是字符串的地址,那么我们要访问字符串就先要取出p1中存储的地址,然后计算偏移量,进行访问不同于p1,p2直接是字符串的地址,直接访问就

2021-01-15 13:34:34 541

原创 C++之共有继承、保护继承、私有继承

C++之共有继承、保护继承、私有继承1.简介2.公有继承3.保护继承4.私有继承1.简介1.封装,public,private作用就是这个目的。  类外只能访问public成员而不能方位private成员;  private成员只能被类成员和友元访问;2.继承,protected的作用就是这个目的;  protected成员可以被子类对象访问,但不能被类外的访问;3.公有继承:class A : public B2.公有继承公有继承:class A : public B#include

2021-01-15 12:28:06 995

原创 C++中函数参数:对象指针、对象、引用

#include <iostream>class test{public: test(int a,int b):x(a),y(b){ std::cout<<"test t:"<<x<<" "<<y<<std::endl; } ~test() { std::cout << "~test()" << std::endl; }p

2021-01-06 22:35:42 556 1

原创 C++11 function类模板

C++11 function类模板1. std::function 简介类模板std :: function是一个通用的多态函数包装器。 std :: function的实例可以存储,复制和调用任何可调用的目标 :包括函数,lambda表达式,绑定表达式或其他函数对象,以及指向成员函数和指向数据成员的指针。当std::function对象未包裹任何实际的可调用元素,调用该std::function对象将抛出std::bad_function_call异常。2. function类模板 templa

2021-01-05 22:10:28 245

原创 char *和QString和string之间的转换

在Qt编程过程中避免不了char* QString string之间的转换问题,整理多个博客以及开发的经验一、char * 和QString之间的转换1.1 char * 转换为 QString将 char * 转换为 QString 比较容易操作,我们可以使用 QString 的构造函数进行转换:QString(const QLatin1String &str);QLatin1String 的构造函数:QLatin1String(const char *str);因此用下面这个语

2021-01-05 21:40:31 679 1

原创 Docker简介

Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。一、docker三大要素1.镜像1.1 我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件...

2020-05-08 22:07:06 152

原创 libevent源码深度剖析之队列

一、单链表/* * Singly-linked List definitions. */#define SLIST_HEAD(name, type) \struct name { \ struct type *slh_first; /* first element */ \}#define SLIST_HEAD_INITIALIZER(head) ...

2020-05-04 14:44:02 322

原创 libevent源码深度剖析之devpoll.c

第一章基础知识1.1 pread和pwrite函数#include <unistd.h>ssize_t pread(int fd, void *buf, size_t count, off_t offset);ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);pread简单来说就是在指定偏...

2020-05-02 22:03:18 252

原创 libevent源码深度剖析之evutil_time.c

第一章 time基础知识1.1 struct timeval/* * Structure used in select() call, taken from the BSD file sys/time.h. */struct timeval { long tv_sec; /* seconds */ long tv_usec; ...

2020-05-02 16:32:24 536

原创 libevent源码深度剖析之epoll.c

第一章 poll基础知识select() 和 poll() 系统调用的本质一样,poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。poll() 和 select() 同样存在一个缺点就是,包含大量文件描述符的数组被整体复...

2020-05-02 11:35:43 490

原创 Linux SIGPIPE信号产生原因与解决方法

1. 产生SIGPIPE的原因SIGPIPE信号产生的原因:简单来说,就是客户端程序向服务器端程序发送了消息,然后关闭客户端,服务器端返回消息的时候就会收到内核给的SIGPIPE信号。TCP的全双工信道其实是两条单工信道,client端调用close的时候,虽然本意是关闭两条信道,但是其实只能关闭它发送的那一条单工信道,还是可以接受数据,server端还是可以发送数据,并不知道client端...

2020-04-30 11:15:58 488

原创 用callgraph生成的函数调用关系图

这里写自定义目录标题1. 环境安装(ubuntu)2. callgraph使用2.1 生成调用图1. 环境安装(ubuntu)$ sudo apt-get install cflow graphviz$ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx$ wget -c https:/...

2020-04-29 16:12:00 600

原创 Redis源码模块

Redis源码模块第一阶段第二阶段第三阶段第四阶段第五阶段第六阶段其他代码文件介绍第一阶段阅读Redis的数据结构部分,基本位于如下文件中:内存分配 zmalloc.c和zmalloc.h动态字符串 sds.h和sds.c双端链表 adlist.c和adlist.h字典 dict.h和dict.c跳跃表 server.h文件里面关于zskiplist结构和zskiplistNode...

2020-04-11 21:25:18 211

空空如也

空空如也

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

TA关注的人

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