自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 资源 (2)
  • 收藏
  • 关注

原创 IO多路复用技术中的水平触发(level trigger,LT)和边缘触发(edge trigger,ET)技术

文章目录IO多路复用技术中的水平触发(level trigger,LT)和边缘触发(edge trigger,ET)技术1. 什么是水平和边缘触发?1.1 水平触发1.1.1 读操作1.1.2 写操作1.2 边缘触发 (特指epoll模式下)1.2.1 读操作1.2.2 对于写操作2 水平触发和边缘触发在 select poll epoll 中的应用2.1 水平触发2.1.1 select 水平触发具体示例:2.1.2 poll 水平触发具体示例:2.1.3 epoll 水平触发具体示例:2.2 epoll

2020-11-16 23:15:05 1491

原创 tcp的哪些机制保证了TCP可以提供可靠性的服务?

tcp的哪些机制保证了TCP可以提供可靠性的服务?文章目录tcp的哪些机制保证了TCP可以提供可靠性的服务?1 连接管理1.1 TCP通过三次握手建立连接1.2 TCP通过四次挥手断开连接2 校验和机制3 序列号机制3.1 分片3.2 拆包与组包3.3 根据包的序列号对 重复、丢失的包进行处理4 ACK机制5 重传定时器功能6 流量控制:滑动窗口机制7 拥塞控制TCP 通过以下机制来提供可靠通信:1 连接管理1.1 TCP通过三次握手建立连接TCP三次握手的目的:确认需要连接的服务器 IP地址

2020-10-19 21:58:09 3434

原创 Linux 线程或者进程在固定的CPU上运行方法

文章目录Linux 线程或者进程在固定的CPU上运行方法1 如何查看进程或者线程运行在哪个CPU上?1.1 利用PS命令进行查看1.2 利用top命令进行查看1.3 利用 proc信息进行查看2 利用 API 将线程和进程在固定的一个或者几个CPU运行2.1 更改线程运行的CPU2.1.1 pthread_setaffinity_np 接口2.1.2 代码2.2 将进程运行在固定的CPU2.2.1 sched_setaffinity 接口使用2.2.2 代码2.3 cpu亲和性(affinity)2.4 t

2020-09-14 23:32:04 1424

原创 kernel 中 container_of 的原理及使用介绍

文章目录kernel 中 container_of 的原理及使用介绍container_of 原理源码解析使用示例kernel 中 container_of 的原理及使用介绍container_of 原理container_of : 根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针。原型:#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mp

2020-09-14 23:23:25 477

原创 C语言中 offsetof 的使用

文章目录C语言中 offsetof 的使用头文件以及宏原型函数描述示例程序:C语言中 offsetof 的使用头文件以及宏原型 #include <stddef.h> size_t offsetof(type, member);函数描述 这个宏会返回一个结构体成员相对于结构体开头的字节偏移量(**经过结构对其之后**): - type 结构体名称 - 结构体成员名称 这个宏非常有用,由于结构体对其的问题,整个结构体的大小并不是所有成员大小

2020-09-14 23:21:44 4437 1

原创 VxWorks解析ELF格式VxWorks镜像过程

文章目录VxWorks解析ELF格式VxWorks镜像过程1 VxWorks 解析ELF镜像流程1.1 VxWorks镜像类型1.2 ELF 解析函数 bootElfModule 加载过程1.3 bootElfModule 调用过程图1.4 bootElfModule函数详解2 ELF文件结构描述2.1 readelf 命令介绍2.2 ELF文件头描述2.3 ELF文件中的程序头VxWorks解析ELF格式VxWorks镜像过程1 VxWorks 解析ELF镜像流程1.1 VxWorks镜像类型本文

2020-08-15 16:47:25 1905

原创 quagga命令行解析

文章目录0 引言1 主要结构体2 命令的定义DENFUN 系列宏节点的安装单条命令的安装quagga 中对readline库使用命令的输入命令的补全命令的解析与执行0 引言quagga 是一个优秀的开源路由软件,是zebra 的升级维护版本,实现了rip、ospf、bgp等协议,可以将linux设备变成一个功能完整的路由器。quagga 提供了一个类似Cisco命令行的分级多用户命令解析引擎—VTY ,类似于linux shell功能,涉及各个命令的解析,查找,补全等功能的实现,quagga命令解析主要

2020-08-01 23:00:07 3024 3

原创 QUAGGA 线程机制解析

文章目录QUAGGA 线程机制解析1 引言1.1 说在前面的话1.2 QUAGGA 线程机制简介2 重要的结构体解析2.1 线程结构体 thread线程对CPU使用的情况 struct cpu_thread_history线程管理结构 thread_master3事件主循环顺序3.1 源码解析3.2 线程之间状态转换图3.3 线程调度时序图4 API的使用4.1 主要的外部接口4.2 内部接口5 总结QUAGGA 线程机制解析1 引言1.1 说在前面的话最近研读 QUAGGA1.2.4源码,发现QU

2020-08-01 22:54:16 1424

原创 log4z源码解析

文章目录log4z源码解析1. 继承关系图2 各个类详解2.1 ILog4zManager ---- log4z日志库的抽象基类内部结构图源码注释2.2 ThreadHelper ---- log4z 线程抽象基类2.2.1 内部结构图2.2.2. 源码解析2.3 LogerManager log4z最重要的类2.3.1内部接口调用关系图2.3.2 类源码解析2.3.3 主要类接口介绍run源码时序图popLog(LogData *& log)源码调用关系configFromString

2020-08-01 22:15:57 1021 1

原创 log4z日志库使用

文章目录log4z日志库使用1 log4z 简介2 基本使用2.1 直接使用:2.2 编译成库进行使用2.3 基本使用2.4 log4z的高级用法3 后记log4z日志库使用1 log4z 简介Log4z是一款开源的轻量级高性能的跨平台日志库 主要针对7*24小时服务器程序的日志输出与跟踪调试,支持64/32位的windows/linux/mac/android/iOS等操作系统.MIT开源授权 授权的限制非常小.跨平台支持linux & windows & mac, 轻量级 只

2020-08-01 22:05:29 1742

原创 c/c++ 基类析构函数为什么必须定义为虚函数?

文章目录c/c++ 基类析构函数为什么必须定义为虚函数?1 现象2 原因剖析3 扩展c/c++ 基类析构函数为什么必须定义为虚函数?1 现象在c++ 实现多态时,我们经常会用到用基类来操作派生类,这样多便于上层接口的统一,而把基类定义为虚函数,就是为了释放基类句柄时只析构基类而不析构派生类的情况发生。下面列举三种使用情况基类析构函数不是虚函数,不使用多态,创建派生类对象。基类析构函数不是虚函数,使用多态,创建派生类对象。基类析构函数是虚函数,使用多态,创建派生类对象。以上几种情况对应代码

2020-08-01 21:57:12 1004

原创 c++ STL 容器 中 swap的使用

文章目录c++ STL 容器 中 swap的使用vector容器中swap的使用c++ STL 容器 中 swap的使用vector容器中swap的使用主要涉及以下内容:size 和 capacity 区别swap的基本用法swap在缓存队列中的使用可以从下面代码中查看上述内容的解释#include <iostream>#include <vector>#include <stdio.h>void printVector(std::ve

2020-08-01 21:56:24 1355

原创 c++ explicit 关键字解析

c++ explicit 关键字解析c++ 关键字 explicit 只能用于修饰只有一个参数的类的构造函数,作用是表明该构造函数是显示的,而非隐式的,跟explicit相对的是另一个关键字 implicit ,意思是隐藏,类构造函数默认情况下即声明为 implicit总结explicit 关键字只需用于类内的单参数构造函数前面。由于无参数的构造函数和多参数的构造函数总是显示调用,这种情况在构造函数前加 explicit无意义goolse的c++规范中提到explicit的优点可以避免不合时宜的类

2020-08-01 21:55:15 293

原创 Linux下.swp文件的恢复方法

文章目录Linux下.swp文件的恢复方法.swp简介.swp的产生解决方法:Linux下.swp文件的恢复方法在Linux用vim vi等编辑器编辑文件时,有时遇到突然崩溃或者没有反应时,在编辑文档的目录下就会出现一个交换文件即:.swp文件,这是一个隐藏文件,需要 ls -a 才能显示出来,可以利用vim工具重新恢复原来的文件vim -r filename 即可恢复到之前的编辑状态root@wan:~# cat test.txt .swp.txtadfasd asdfsaroot@wan:

2020-07-03 22:38:06 4963

原创 Libevent在嵌入式设备中的串口、can等的应用

Libevent的简单应用0 引言在实际开发过程中大家经常遇到各种各样的事件,常见的有:读、写、定时器、信号等事件,一般处理方式有以下几种:每个IO分配一个线程采用IO复用技术 select poll epoll IOCP等NIO 采用轮询的方式各种各样的事件库有很多,比如说:Libevent、libev、libuv 等网络库,这些库大多仅支持网络,由于本人在使用场景比较特殊,设备...

2020-06-13 20:49:21 1760 2

原创 利用CMake搭建软件编译架构

利用CMake搭建软件编译架构0 写在前面的话本博文主要介绍如何利用cmake组织软件编译,并且提供一个简单的软件编译架构的模板。大家可以根据自己实际情况进行改动,本文主要的内容:cmake 命令简介cmake 常用API详解利用cmake搭建软件编译框架主要的软件环境如下:cmake版本:3.15os:Ubuntu 18.04 64bitLanguage:c/c++cm...

2020-05-03 22:40:45 768

原创 VxWorks可加载型启动方式流程梳理

文章目录VxWorks可加载型启动方式流程梳理1 VxWorks 的两种基本启动方式1.1 加载型启动方式1.1.1 bootrom 文件bootrom文件的组成:bootrom 文件的格式bootrom 文件的类型1.1.2 VxWorks镜像文件1.2 可启动型启动方式1.3 两种启动方式的应用场景2 可加载型启动流程梳理3 参考文档VxWorks可加载型启动方式流程梳理1 VxWorks...

2020-04-29 21:42:41 2071

原创 在MFC程序中添加控制台打印的方法

在MFC程序中添加控制台打印的方法在MFC程序开发时经常会需要打印消息,可以在stdafx.cpp 或者其他 文件中 添加如下代码即可从控制台看到printf或者cout的打印输出#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup")该方法在release和debug下均有效,并且 亲测 vs2010 ...

2020-03-31 23:16:58 855 2

原创 Udp数据发送最大长度问题讨论

Udp数据发送最大长度问题讨论1. 问题描述在使用udp进行编程时,遇到这样一个问题:利用Udp进行发送视频数据,会出现发送失败的情况,具体现象如下:1.1 widows下打印相关的错误输出:func UdpClient::Send line 114 sendto err errno is 10040通过查阅相关文档可知具体的错误原因:WSAEMSGSIZE10040 (0x27...

2020-03-31 00:11:03 3804

原创 常见设计模式之(九):原型模式

文章目录常见设计模式之(九):原型模式1 什么是观察者模式(Prototype pattern)?2 c++实现2.1 通用类图2.2 c++实现3 总结3.1 原型模式的优缺点3.2 原型模式的使用场景3.3 与建造者模式、工厂模式的区别4 题外话参考常见设计模式之(九):原型模式1 什么是观察者模式(Prototype pattern)?摘自 java 设计模式官网 中 有关观察者模式的...

2020-03-24 22:10:09 190

原创 常见设计模式之(七):状态模式

文章目录常见设计模式之(七):状态模式1 什么是状态模式(state pattern)?1.1 定义1.2 状态模式中3个角色2 简单状态模式2.1 状态切换图2.2 类图2.3 c++代码3 标准状态模式3.1 状态图3.2 类图3.3 c++实现4 优缺点以及使用场景4.1 状态模式的优点4.2 状态模式的缺点4.3 状态模式的使用场景4.4 状态模式的注意事项5 实际项目中的状态模式常见设...

2020-03-22 21:58:43 237

原创 常见设计模式之(五):观察者模式

文章目录常见设计模式之(五):观察者模式1 什么是观察者模式(observer pattern)?1.1 定义1.2 观察者模式中角色2、观察者模式的c++实现3 观察者模式的应用3.1 观察者模式的注意事项广播链问题程序效率3.2 实际项目中具体应用4 观察者模式的扩展4.1 项目中真实的观察模式4.1.1 观者者和被观察者之间的沟通机制4.1.2 观察者响应4.1.3 被观察者选择通知的人4....

2020-03-22 21:53:37 371

原创 常见设计模式之(四):模板模式

文章目录常见设计模式之(四):模板模式1 什么是模板模式(template pattern)?2 模板模式基于c++的实现3 模板模式的扩展 (带钩子方法的模板模式)4 模板方法的应用场景以及优缺点4.1 模板方法的应用场景4.2 模板方法的优点4.3 模板方法的缺点常见设计模式之(四):模板模式1 什么是模板模式(template pattern)?摘自 java 设计模式官网 中 有关模...

2020-03-18 22:43:20 246

原创 常见设计模式之(三):抽象工厂模式

文章目录常见设计模式之(三):抽象工厂模式1 什么是抽象工厂模式(abstract factory pattern)?2 抽象工厂模式3 抽象工厂基于c++的实现4 结束语常见设计模式之(三):抽象工厂模式1 什么是抽象工厂模式(abstract factory pattern)?摘自 java 设计模式官网 中 有关抽象工厂模式的定义:Provide an interface for ...

2020-03-12 22:50:55 177

原创 VxWorks下追踪线程死锁问题

文章目录VxWorks下追踪线程死锁问题1、问题描述2、问题代码3、问题分析VxWorks下追踪线程死锁问题1、问题描述最近在VxWorks下调试程序遇到某任务挂起的情况,在shell 或者网络能通的情况下,可以查看系统的状态信息,VxWorks查看系统状态信息的命令有如下:命令说明i显示系统信息,包含当前任务明、状态等(反复查询目标机,有时可能显示不一致)ti...

2020-03-09 23:42:57 1276

原创 常见设计模式之(二):工厂模式(一)

文章目录常见设计模式之(一):工厂模式(一)1 什么是工厂模式(factory pattern)?2 通用工厂模式以及其基于c++实现2.1 通用工厂模式2.2 通用工厂模式的c++实现3 工厂模式的扩展之 简单工厂4 结束语常见设计模式之(一):工厂模式(一)1 什么是工厂模式(factory pattern)?摘自 java 设计模式官网 中 有关工厂模式的定义:Define an ...

2020-03-07 10:42:41 278

原创 常见设计模式之(一):单例模式

文章目录常见设计模式之(一):单例模式1 什么是单例模式(singleton pattern)?2 单例模式的使用场景、优缺点2.1 使用场景2.2 优点2.3 缺点2.4 懒汉与饿汉2.5 单例模式的线程安全问题3 单例模式的c++实现3.1 饿汉模式的实现3.2 懒汉模式的实现3.2.1 版本1 【适合单线程的场景,在多线程下存在线程安全问题】3.2.2 版本2 通过加锁保证线程安全3....

2020-02-28 22:31:59 337

原创 常见设计模式、设计原则总览 (Design Patterns && Design Principle List Table)

常见设计模式、设计原则总览 (Design Patterns && Design Principle List Table)本专栏博文主要介绍常见的设计模式和设计原则,记录自己实际工作中用到的设计模式、设计原则,作为平时工作经验的一种总结,结合类图、代码讲解进行讲解...

2020-02-21 17:33:05 213

原创 Posix标准系统接口总览

Posix标准系统接口总览(Portable Operating System Interface)中文:可移植操作系统接口,X则表明其对Unix API的传承,作为本系列博文的开篇,主要介绍在我们实际开发过程中应用到的POSIX系列接口,主要涉及多线程、实时性等方面,开发平台主要涉及Linux Vxworks ,介绍POSIX标准在两种平台下的实现差异,详细内容见下图:...

2020-02-20 19:58:23 10111

原创 POSIX 之条件变量(Condition Variable)、条件变量属性(Condition Variable Attributes )

POSIX 之条件变量(Condition Variable)、条件变量属性(Condition Variable Attributes )0 引言条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。本博文将详细介绍posix co...

2020-02-19 15:10:19 518

原创 gcc g++有关警告的处理

gcc g++有关警告设置1、将警告视为错误,停止编译编译选项加上-Werror 遇到任何的警告工程将停止编译。2、忽略某些特定的警告2.1 -Werror=write-strings问题描述:- deprecated conversion from string constant to ‘char*’ [-Werror=write-strings]解决办法:2.2 -Werror...

2020-02-19 12:04:05 1423

原创 POSIX 之互斥锁(mutex)、互斥锁属性

POSIX 之互斥锁(mutex)、互斥锁属性0 引言在多线程程序设计时不可避免地会遇到线程同步问题,最常用的操作就是进行加锁,通过加锁来保证数据的准确性,在所有加锁方式中最简单、最常用也就是mutex锁,本博文将详细介绍posix mutex的使用,本文主要内容:Mutex Synchronization APIsMutex Attributes1 Mutex1.1 Mutex ...

2020-02-18 13:46:20 1128

原创 POSIX 之线程、线程属性(pthread attr)

POSIX 之线程、线程属性(pthread attr)0 引言本文主要介绍posix标准中线程以及线程属性的相关内容,但是posix标准在不同平台下的实现并不完全一致,本文主要介绍pthread系列API的基本使用同时介绍在不同平台(Linux—Ubuntu18.04 64位 和VxWorks 6.8)下的实现差异.博文的主要内容由以下几个方面组成:posix线程的使用(Linux)p...

2020-02-17 23:35:14 1248

原创 c++11 atomic 之 6种内存序

c++11 atomic 之 6种内存序

2020-02-14 10:09:03 454

原创 c++11 atomic 之 c-style接口使用

c++11 atomic 之 c-style接口使用atomic的c-style接口 :提供相同语义但是不使用诸如:template reference 和member fucntion 等c++特性,整个atomic接口有一个C-style 对等品,成为C standard的一份补充,C-style接口一般适用于需要在C和C++之间保持兼容的代码身上 。1、c-style变量下表列出了类型...

2020-02-12 22:22:35 498

原创 c++11 atomic 之 atomic 使用

c++11 atomic 之 atomic 使用1、atomic支持的数据类型atomic 原子操作支持bool、int、char等数据数据类型,但是不支持浮点数类型 ,下表为基本数据类型、c-style支持的类型、对应的atomic类型contained typeatomic c-stypeboolatomic_boolcharatomic_charsi...

2020-02-12 21:23:23 35093

原创 c++11 atomic 之 atomic_flag 使用

c++11 atomic 之 atomic_flag 使用c++11 引入了原子操作部分,为无锁编程提供了极大的便利,本系列博文主要涉及一下几个方面atomic_flag:c++11 <atomic> 头文件中最简单的原子类型: 。atomic_flag 一种简单的原子布尔类型,只支持两种操作,test-and-set 和 clear。atomic 对 bool char i...

2020-02-12 14:23:27 7853

原创 利用gcc __sync_系列函数实现原子操作

利用gcc __sync_系列函数实现原子操作1、gcc __sync_系列函数介绍Gcc 4.1.2版本之后,支持内置原子操作。就是说,不需要引入第三方库(如pthread)的锁保护,即可对1、2、4、8字节的数值或指针类型,进行原子加/减/与/或/异或等操作。1)赋值相关的操作type __sync_fetch_and_add (type *ptr, type value); /...

2020-02-11 18:03:12 844

原创 debian 更换软件源

debian 9 更换软件源1、备份系统源文件/etc/apt$ cp -p sources.list ./sources.list.back2、添加源下面以中国科技大学为例sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list3、更新源apt-get update...

2020-01-30 00:02:16 1147

原创 WorkBench3.2安装指南

WorkBench3.2安装指南0 、引言本文介绍一种直接在win7或者win10下安装WorkBench的方式而不是利用虚拟机,通过VMware或者virtualbox等软件虚拟出网卡,改变虚拟网卡地址的方式完成workbench秘钥的验证。1、WorkBench3.2下载WorkBench3.2 安装包直接解压缩文件可以看到如下文件可以接解压缩文件列表中的DVD-R175636.1...

2020-01-29 23:50:12 6439 12

JDK配置(Java环境配置)

JDK安装与环境变量配置,JDK安装与环境变量配置

2016-01-19

常见的嵌入式linux学习

常见的嵌入式linux学习和如何选择ARM芯片问

2014-08-31

空空如也

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

TA关注的人

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