C++
文章平均质量分 59
C++
水墨长天
每天,提醒我,多进步一点
展开
-
微内核与宏内核的区别和联系
内核是计算机操作系统的核心程序,它负责整个OS功能的调控。原创 2023-04-28 16:16:52 · 1971 阅读 · 0 评论 -
基于Qt WebChannel的前端UI桌面混合应用
通过WebEngine和WebChannel实现前端js和Qt C++的交互,进而由Qt调用C++本地方法来处理系统或平台相关的业务功能,完成一个前后端的高度集成。Qt本身自带强大的功能,开发人员根据产品特点设计合适的业务架构,如插件化、模块化的架构,即可实现一个产品模型。原创 2023-01-29 03:01:55 · 1796 阅读 · 0 评论 -
基于X11协议的Linux快捷键管理
基于X11协议开发的快捷键管理可以避免热键冲突,使用Xlib开发API相对复杂,难度较大,建议按照官方推荐使用开发套件。原创 2023-01-25 20:58:51 · 1433 阅读 · 0 评论 -
C++ 文本编码探测CED (Compact Encoding Detection)技术
CED是一个相对可靠的国际化消息编码检测组件,可以帮助我们在国际项目中判别服务端返回的是什么编码,从而实现编码的转换,当然,现代化的软件系统编码很多都是UTF-8的,但为了兼容老系统,可以扩展此项功能。原创 2022-10-04 16:59:40 · 1105 阅读 · 0 评论 -
OpenSSL:适用TLS与SSL协议的全功能工具包,通用加密库
OpenSSL:适用TLS与SSL协议的全功能工具包,通用加密库原创 2022-07-04 09:52:48 · 856 阅读 · 0 评论 -
gSOAP:基于XML的SOAP/REST的工具包
gSOAP:基于XML的SOAP/REST的工具包原创 2022-07-04 08:50:03 · 418 阅读 · 0 评论 -
C++ 无锁队列
atomic类型的操作是原子操作,是不可分割的,不能被中断的操作。程序代码中的一条简单赋值语句会被翻译为多条汇编指令,那么多个线程同时对某一存储单元进行修改,就有可能出现脏数据,原子操作可以避免脏数据的出现。2. 多线程读写三、总结无锁队列依靠原子和CAS操作,对队列的读写索引进行判断来入队和出队,它没有使用互斥量mutex来进行加锁,从性能上具有明显的优势,但同时编程的复杂性增加了很多,在编码时也要对内存序有简单的了解。...原创 2022-07-03 21:45:15 · 1418 阅读 · 0 评论 -
Compiler Explorer多语言交互式汇编浏览器
Compiler Explorer多语言交互式汇编浏览器一、Compiler Explorer二、使用方法三、参考四、总结一、Compiler ExplorerCompiler Explorer 是一个交互式的编译浏览网站(也可本地部署),它使用nodejs,支持30多种编程语言,可实时浏览编译后的汇编代码。二、使用方法打开Compiler Explorer网站,进行在线编程选择编程语言,和编译器输入任意代码,即可实时浏览生成的汇编代码源代码:int fun(){ int原创 2022-04-08 13:07:22 · 6710 阅读 · 6 评论 -
std::lock_guard的原理和应用
std::lock_guard的原理和应用一、lock_guard二、使用示例三、原理分析四、总结一、lock_guardlock_guard是一种在作用域内控制可锁对象所有权的类型。(原文:An object of type lock_guard controls the ownership of a lockable object within a scope. )lock_guard具有两种构造方法:lock_guard(mutex& m)lock_guard(mutex&am原创 2022-04-07 23:29:52 · 28249 阅读 · 1 评论 -
std::mutex互斥量的应用
std::mutex互斥量的应用一、mutex互斥量二、使用示例三、总结一、mutex互斥量互斥量是在多线程并发中避免数据竞争的一种锁。它有三个常用函数:lock() 加锁unlock() 解锁try_lock() 尝试加锁(不阻塞)二、使用示例#include <iostream>#include <mutex>#include <vector>#include <string>#include <ctime>#原创 2022-04-05 12:35:56 · 924 阅读 · 0 评论 -
Qt 2D图形平面绘制
Qt 2D图形平面绘制前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as np原创 2021-12-25 02:48:52 · 813 阅读 · 0 评论 -
C++ bitset的用法实例
C++ bitset的用法实例一、bitset二、代码三、总结一、bitset顾名思义,bitset是位bit的set集合,是可以当做容器使用的一种数据结构。bitset提供了一些很实用的方法,能用来替代C语言的直接按位运算带来的不便。二、代码#include <iostream>#include <string>#include <bitset>int main(){ std::bitset<5> bs1; //00000,无参默原创 2021-12-15 00:01:09 · 1616 阅读 · 0 评论 -
C++ 浮点数的大小比较
C++ 浮点数的大小比较一、C++的精度损失二、浮点数比较三、总结一、C++的精度损失浮点数的存储格式:符号位指数位尾数位sign bitExponentMantissa浮点数分为单精度float和双精度double,32位和644位系统存储位数略有不同。相对于二进制存储小数,假设只用1位小数存储:则精度为0.5:.1 表示 0.5.0 表示 0.0以此类推:精度e=122精度 e ={1 \above{1pt} 2 ^ 2 } 精度e=221原创 2021-11-20 21:02:18 · 5760 阅读 · 0 评论 -
Linux网络抓包
Linux网络抓包一、IP报文格式二、使用步骤1.引入库2.读入数据总结一、IP报文格式以太网帧以7字节前导码和1字节帧开始符开头(物理层),紧跟源地址和目的地址(MAC层)。IP数据包在DATA字段中,数据段最小为46字节。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarn原创 2021-10-10 02:01:36 · 1348 阅读 · 0 评论 -
minicom RK3399交叉编译(aarch64)
minicom RK3399交叉编译aarch64一、源码下载二、ncurses交叉编译三、minicom交叉编译四、注意五、总结一、源码下载minicom-2.8.tarhttps://salsa.debian.org/minicom-team/minicom/-/archive/2.8/minicom-2.8.tarncurses-5.7.tar.gzhttps://ftp.gnu.org/gnu/ncurses/ncurses-5.7.tar.gzgettext-0.19.tar.gz原创 2021-09-26 19:52:41 · 899 阅读 · 1 评论 -
linux的thrift编译指南详细版(64位 + 32位)
linux的thrift编译指南详细版(64位 + 32位)一、简介二、编译1. OpenSSL2. libevent3. boost4. thrift三、检查四、总结一、简介thrift是使用IDL定义接口的支持多种开发语言的RPC框架,是apache项目之一。二、编译thrift依赖于boost、libevent和openssl。64位系统编译32库需要安装gcc-multilib和g++ - multilib:sudo apt-get install gcc-multilib g+原创 2021-08-21 22:52:55 · 1899 阅读 · 0 评论 -
root用户无法启动vscode的解决方法
root用户无法启动vscode 的解决方法1. vscode with root2. 解决方法3. 总结1. vscode with root今天切换到Ubuntu的root用户进行编码调试,发现VSCode一直无法打开,命令提示和网上搜索到的都是使用--user-data-dir,但依然无效。2. 解决方法vi ~/.bashrc# 添加一行alias code='/usr/share/code/code . --no-sandbox --unity-launch'# 报存生效sou原创 2021-08-08 20:55:09 · 13323 阅读 · 7 评论 -
Linux 多进程模块化设计 - 主进程守护子进程
Linux 多进程模块化设计 - 主进程守护子进程1. Linux多进程2. 示例3. 总结1. Linux多进程forkpid_t fork(void); //复制调用进程,并创建为子进程waitpid_t wait(int *status); //等待调用进程的子进程状态变化,此处只考虑结束的情况2. 示例#include <iostream>#include <string>#include <map>#include <ve原创 2021-08-08 04:21:20 · 277 阅读 · 0 评论 -
boost 实现ini配置读写
boost 实现ini配置读写1. Property Tree2. 示例3. 总结1. Property TreeBoost使用property_tree来实现ini的读写,同时也支持xml和json。2. 示例#include <stdio.h>#include <string.h>#include <boost/property_tree/ini_parser.hpp>using namespace boost::property_tree;in原创 2021-08-07 18:17:03 · 712 阅读 · 0 评论 -
Boost 图片/文件转base64编码
Boost 图片/文件转base64编码1. Boost的Base642. 实例3. 总结1. Boost的Base64Boost实现了base64的编码,包含在头文件:#include "boost/archive/iterators/binary_from_base64.hpp"#include "boost/archive/iterators/base64_from_binary.hpp"#include "boost/archive/iterators/transform_width.h原创 2021-08-01 01:02:35 · 768 阅读 · 0 评论 -
C/C++计算MD5值 - Boost MD5
C/C++计算MD5值 - Boost MD5Boost MD5一、pandas是什么?二、使用步骤1.引入库2.读入数据总结Boost MD5Boost实现了一个md5的哈希校验算法,用于对文件指纹进行校对。boost/uuid/detail/md5.hpp一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pd原创 2021-07-31 09:47:37 · 2278 阅读 · 3 评论 -
C/C++ 计算MD5值 - 源自Notepad++的MD5
C/C++ 计算MD5值 - 源自Notepad++的MD5MD5Notepad++的MD5实例MD5MD5信息摘要算法,即文件指纹,通过比较MD5来判断文件是否一样。Notepad++的MD5从Notepad++的源码仓库中,有一份实现MD5的头文件。notepad-plus-plus/PowerEditor/src/MISC/md5/md5.h实例#include <stdio.h>#include "md5.h"int main(){ const char *原创 2021-07-30 23:09:27 · 375 阅读 · 0 评论 -
Althttpd 源码分析
Althttpd 源码分析 - 主函数main 主函数总结main 主函数int main(int argc, char** argv){ int i; /* 循环次数 */ char *zPermUser = 0; /* 守护进程的用户权限 */ const char *zPort = 0; /* http server端口 */ int useChrootJail = 1; /* 是否更改root目录 */ struct passwd *pwd = NULL;原创 2021-07-25 16:32:47 · 664 阅读 · 0 评论 -
ipsvd arm交叉编译
ipsvd 参数对不上,不使用conf-ccconf-ldprint-ar.shfind-systype.sh全部配置为arm-linux-gnueabihf-./package/compile报错./chkshsgr: 1: ./chkshsgr: Syntax error: word unexpected (expecting “)”)运行gcc -O2 -Wall chkshsgr.c -o chkshsgr再次编译./package/compile...原创 2021-06-07 22:14:50 · 160 阅读 · 1 评论 -
C++11标准库和Windows/Linux系统库的多线程同步机制
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2021-05-19 22:48:32 · 514 阅读 · 0 评论 -
CPU乱序执行
CPU乱序执行前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结https://www.zhihu.com/question/373792065前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步原创 2021-04-15 00:49:20 · 486 阅读 · 2 评论 -
Dump文件分析 - PDB不匹配的情景
Dump文件分析 - 无PDBWinDbg1. 运行程序产生dump2. WinDbg参考总结WinDbgWindows 调试程序 (WinDbg)可用于调试内核模式和用户模式代码、分析故障转储以及在代码执行时检查 CPU 寄存器。1. 运行程序产生dump#include <windows.h>#include <tchar.h>#include <DbgHelp.h>#pragma comment(lib, "dbghelp.lib")LONG原创 2021-04-02 01:20:15 · 1722 阅读 · 0 评论 -
Windows Dump转储文件
Windows Dump转储文件Dump是什么?如何生成windows dump文件1.注册表2.读入数据总结Dump是什么?程序运行时在内存中的数据是动态和易失的,当程序发生崩溃的时候,把这些数据转储为静态的dump文件,这样我们就可以得到这些运行时数据。如何生成windows dump文件1.注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting]DumpFolder = 代码如下(示例):原创 2021-04-01 11:34:02 · 837 阅读 · 0 评论 -
C++ 左值引用 和 右值引用
C++ 右值引用前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimp原创 2021-03-27 15:38:51 · 177 阅读 · 0 评论 -
Windows驱动程序开发 - 初识驱动
Windows驱动程序开发 - 初识驱动什么是驱动程序?[1]. 搭建Windows驱动开发环境[2]. 第一个驱动程序[3]. 双机调试参考总结什么是驱动程序?驱动(Driver)可以简单理解为设备的操作程序,通常驱动是要符合操作系统规范的。情景一:没有操作系统的情况(裸机)应用通过直接操作接口来发送命令编码,这一过程需要开发人员熟悉数据手册。设备通过接口接收命令,直接执行最后把命令封装成函数,形成库#mermaid-svg-EdSqVzlrrS4aRRx2 .label{font-f原创 2021-03-14 15:52:15 · 2194 阅读 · 0 评论 -
Windows音量变化通知 - 系统音量监控
Windows音量变化通知 - 系统音量监控Endpoint Volume Controls[1] 实现IAudioEndpointVolumeCallback接口[2] 主函数总结参考Endpoint Volume Controls本次使用win32 api的Endpoint Volume Controls实现当系统音量变化时程序收到通知,环境为win10 64位。[1] 实现IAudioEndpointVolumeCallback接口实现IAudioEndpointVolumeCallbac原创 2021-03-06 18:15:12 · 1234 阅读 · 0 评论 -
进程间通信 之 共享内存
进程间通信 之 共享内存内存共享[1]. 被共享方[2]. 共享方总结内存共享内存共享使用到的函数有以下5个:CreateFileMapping 创建OpenFileMapping 打开MapViewOfFile和UnmapViewOfFile 映射挂载卸载,用于读写操作CloseHandle 关闭[1]. 被共享方被共享方即创建者,通过创建共享内存和写入数据供其它程序使用。#include <windows.h>#define BUF_SIZE 256#de原创 2021-03-06 15:52:10 · 133 阅读 · 0 评论 -
C++ string的COW和SSO策略
现代化的编译器大多数都是实现的SSO策略,我们在编码过程中不用太关注string的实现细节,但对于COW和SSO的基本概念要有基础的了解,更进一步的了解COW和SSO策略可以查看对应编译器提供的源码。原创 2021-03-14 00:26:43 · 1959 阅读 · 0 评论 -
C++ Lamda表达式
C++ Lamda表达式Lambda表达式是什么?1. Lambda的格式2. 注意点总结Lambda表达式是什么?Lambda是C++11之后新增的匿名函数表达式,使用它可以很方便的定义匿名函数,通常匿名函数的代码行数都是比较少的时候才用,方便的同时也增加了代码阅读的难度。1. Lambda的格式正常情况下我们定义一个函数,样式如下:int func(int iX, int iY){ return iX + iY;}而Lamda是匿名函数,故没有函数名,经过转换变成下面的样子:原创 2021-03-10 20:21:58 · 409 阅读 · 0 评论 -
C++的const成员函数
C++的const成员函数const成员函数是什么?实例总结const成员函数是什么?通常我们看到的const成员函数格式类似于:int QueryBalance(int iBalanceVal) const; 简单的说,const成员函数是类的常类成员,它能防止任意成员变量被修改。假设我们有一个银行卡类,卡提供查询余额的成员函数,那我们肯定不能让这个函数对卡的任一信息做修改,这时候就可以使用const函数。实例我们来看一下银行卡的例子,查询余额是内部公开接口,正常情况不允许修改数据。c原创 2021-03-10 00:17:43 · 2707 阅读 · 0 评论