自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (5)
  • 收藏
  • 关注

原创 完善博文 共享内存一写多读无锁实现的代码逻辑部分

使用共享内存(内存映射)实现发布订阅模式多进程实现PubSub发布订阅模式,从而实现进程间的通信。 通信方式可以是TCP/UDP,管道Pipe/消息队列,共享内存shared memory等等。其中TCP/UDP的方式是可以用作局域网以及跨平台的通信,Pipe/消息队列是进程间基于系统实现比较基础的通信,这两者有大量优秀的第三方库支持,如ZeroMQ,只要加入我们自定义数据的转换方式即可方便实现;而共享内存是实现进程间通信最快的方式,但因为共享内存的设计并不是用来做类似PubSub这种模式的实现的,并

2020-12-29 14:49:11 1330 4

原创 如何读取指针指向的地址空间呢?

方法使用%p 接收指针返回的地址空间代码#include <stdio.h>#include <stdlib.h>int main(){ int a = 100; int *a_p = &a; printf("%p\n",&a);//输出:002AF744 输出的是a变量的地址 printf("%p\n",a_p);//输出:002AF744 通过指针变量a_p输出a变量的地址 printf("%p\n"

2020-12-28 19:25:24 2191

原创 linux使用共享内存进行进程通信

一、什么是共享内存共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。使用共享内存进行通信的进程都需要同一段共享内存连接到它们自己的地址空间中,从而所有进程都可以访问共享内存中的数据,这段内存就好像由C语言函数malloc()分配的一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的其他进程特别提醒:共享内存并未提供同步机制,也就是说,在第一个进程结束对共

2020-12-28 19:11:50 473

原创 使用named_mutex和named_condition配合实现读写锁

代码代码的名称是read_write_mutex.h 初步优化 如果涉及到进程挂掉了,造成进程堵塞,如何解决?还未涉及#include <boost/interprocess/sync/named_condition.hpp>#include <boost/interprocess/sync/named_mutex.hpp>namespace bip = boost::interprocess;namespace chy{ class shared_mut

2020-12-26 11:41:10 303

原创 clion编译器解决undefined reference to symbol ‘shm_open@@GLIBC_2.2.5‘

修改CMakelists文件cmake_minimum_required(VERSION 3.17)project(mutex_learn)set(CMAKE_CXX_STANDARD 14)set(BOOST_ROOT "/usr/local/include/boost")#添加头文件搜索路径include_directories(/usr/local/include)#添加库文件搜索路径link_directories(/usr/local/lib)add_executabl

2020-12-24 23:24:43 1278

原创 使用named_mutex实现读写锁,实现进程之间读共享写独占

代码代码的名称是read_write_mutex.h 这个代码可用,但是未优化,还存在冗余的代码 如果涉及到进程挂掉了,造成进程堵塞,如何解决?还未涉及#ifndef BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP#define BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP// (C) Copyright 2006-8 Anthony Williams// (C) Copyright 2012 Vicente J. Botet

2020-12-24 23:22:24 378 2

原创 使用named_mutex实现锁机制

介绍named_mutex是一个进程锁,考虑到进程和线程之间的区别 区别:一个工作单元要想被称作进程,它必须要有操作系统指派给他的地址空间,必须拥有进程ID,必须拥有状态和进程表中的表项。进程和线程之间最大的区别是进程有着自己的地址空间,而线程共享创建它们的进程的地址空间。 本例子是使用多线程的方式来测进程锁的线程安全 等一切结束的时候,好好总结一下,完善这个大坑代码#include <boost/thread/thread.hpp>#include <boost/in

2020-12-24 15:54:20 775 1

原创 解决undefined reference to symbol ‘sem_close@@GLIBC_2.2.5‘问题

错误图示问题原因编译的时候,没有引入库文件sem()位于pthread库中,所以在编译和链接时请确保使用-pthread标志,因此在编译的时候需要导入pthread库文件 编译的顺序出现问题解决办法在clion的CMakeLists.txt文件中添加这一行代码 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")参考链接c - 使用CMake链接到pthread库(在CLion中) cmake :undefined ref..

2020-12-24 14:42:10 1965

原创 Synchronization 进程锁

Boost.Interprocess允许多个进程同时使用共享内存。因为共享内存从定义上来说是进程间共享的,所以Boost.Interprocess需要支持某种同步。 想到同步,我们会想到C++11标准库中的类或Boost.Thread。但是这些类只能用来同步同一进程内的线程,它们不支持不同进程的同步。不过,由于两种情况下面临的挑战是一样的,所以概念也是一样的。 在多线程应用程序中,同步对象(如mutexes和条件变量)驻留在同一个地址空间中,因此所有线程都可以使用,而共享内存的挑战是,独立的进程需要共享

2020-12-24 09:33:28 497

原创 C++读取文件,将文件内容读到string字符串里面

使用stringstream和ifstream实现代码 std::ifstream f{file_name, std::ios::binary}; std::stringstream ss; ss << f.rdbuf(); auto data = ss.str();

2020-12-23 14:17:49 3037 2

原创 使用boost模板函数实现读写锁

介绍shared_mutex即读写锁,不同与我们常用的独占式锁mutex,shared_mutex是共享与独占共存的锁,实现了读写锁的机制,即多个读线程一个写线程,通常用于对于一个共享区域的读操作比较频繁,而写操作比较少的情况。 读写锁比起mutex具有更高的适用性,具有更高的并行性,可以有多个线程同时占用读模式的读写锁,但是只能有一个线程占用写模式的读写锁,读写锁的基本规则可以总结为“写优先,读共享,交叉互斥“,具体表现为读写锁的三种状态: (1)当读写锁是写加锁状态时,在这个锁被解...

2020-12-22 21:29:36 268

原创 ubuntu下clion软件连接boost库文件

整体配置cmake_minimum_required(VERSION 3.17)project(mutex_learn)set(CMAKE_CXX_STANDARD 14)#boost库所在的根目录set(BOOST_ROOT "/usr/local/include/boost")#添加头文件搜索路径include_directories(/usr/local/include)#添加库文件搜索路径link_directories(/usr/local/lib)add_exec.

2020-12-22 17:45:09 320

原创 C++boost Class named_condition翻译

Class named_condition boost::interprocess::named_condition 简介// In header: <boost/interprocess/sync/named_condition.hpp>class named_condition {public: // construct/copy/destruct named_condition(create_only_t, const char *,

2020-12-22 10:09:59 220

原创 boost锁机制中Semaphores的介绍

结构What's A Semaphore? Boost.Interprocess Semaphore Types And Headers Anonymous semaphore exampleWhat's A Semaphore?旗语是一种基于内部计数的进程间同步机制,它提供了两种基本操作。 等待:测试旗语数的值,如果小于或等于0,则等待,否则递减旗语数。 Post:增加旗语数。增加信号量 如果有进程被阻塞,则唤醒其中一个进程。 如果初始旗语数被初始化为1,则Wait操作相当于mutex

2020-12-19 23:38:56 2145 2

原创 对于boost锁机制结论性的介绍

ConditionsWhat's A Condition Variable? Boost.Interprocess Condition Types And Headers Anonymous condition exampleWhat's A Condition Variable?在前面的例子中,一个mutex被用来锁定,但我们不能用它来有效地等待,直到满足继续的条件。一个条件变量可以做两件事。 wait: 线程被阻塞,直到其他线程通知它可以继续,因为导致等待的条件已经消失。 通知:线程通

2020-12-19 23:12:34 364 1

原创 对官方Mutexes的翻译

参考链接参考链接MutexesWhat's A Mutex? Mutex Operations Boost.Interprocess Mutex Types And Headers Scoped lock Anonymous mutex example Named mutex exampleWhat's A Mutex?互斥是相互排斥的意思,它是进程之间最基本的同步形式。互斥保证只有一个线程可以锁定一个给定的互斥。如果一个代码段被mutex锁定和解锁包围,就会保证每次只有一个线程执

2020-12-19 21:16:52 204 1

原创 boost官方文档同步机制Synchronization mechanisms overview

参考链接官方文档Synchronization mechanisms overviewNamed And Anonymous Synchronization Mechanisms Types Of Synchronization Mechanisms 如前所述,如果不能有效地同步对内存的访问,那么通过内存映射文件或共享内存对象在进程之间共享内存的能力就不是很有用。这和线程同步机制的问题是一样的,线程之间共享堆内存和全局变量,但对这些资源的访问通常需要通过mutex和条件变量进行同步。Boost

2020-12-19 18:24:39 179 2

原创 sqlite_orm sync_schema源码即翻译

源码 /** * This is a cute function used to replace migration up/down functionality. * It performs check storage schema with actual db schema and: * * if there are excess tables exist in db they are igno

2020-12-19 11:23:13 322 2

原创 数据库对象中get_all_pointer指令的详解

/** * SELECT * routine. * O is an object type to be extracted. Must be specified explicitly. * @return All objects of type O as `std::unique_ptr<O>` inside a `std::vector` stored in database at ...

2020-12-17 20:53:15 332

原创 C++中lock_guard的学习

lock_guard锁守卫是一个管理mutex对象的对象,使其始终处于锁定状态。 在构造时,mutex对象被调用线程锁定,在销毁时,mutex被解锁。这是最简单的锁,作为一个自动持续时间的对象,它的作用特别大,可以持续到上下文结束。通过这种方式,它可以保证mutex对象在发生异常时被正确解锁。 但请注意,lock_guard对象并不以任何方式管理mutex对象的寿命:mutex对象的持续时间至少应延长到锁定它的lock_guard被破坏为止。代码// lock_guard example#

2020-12-17 16:00:54 866

原创 sqliteorm的sync_schema介绍

迁移功能在迁移过程中,没有明确的上下函数。取而代之的是sqlite_orm提供的sync_schema函数,它负责将实际的db文件模式和你在make_storage调用中指定的模式进行比较,如果有什么不一样,它就会改变或放弃/创建模式。storage.sync_schema();// orstorage.sync_schema(true);注意事项请注意,sync_schema并不能保证数据会被保存。它只是试图保存数据。下面你可以看到sync_schema在调用时遵循的规则列表。 如

2020-12-17 15:42:49 856 4

原创 boost::interprocess::named_mutex的翻译和学习

官方地址 named_mutex 简介// In header: <boost/interprocess/sync/named_mutex.hpp>class named_mutex {public: // construct/copy/destruct 构建/复制/销毁 named_mutex(create_only_t, const char *, const permissions & = permissions());

2020-12-17 15:06:01 879 1

原创 ECC密钥结构和密码学基础

参考链接密码学基础3:密钥文件格式完全解析 ECC数据结构

2020-12-16 11:28:03 1437

原创 C++vector相关学习,我的理解

vector的初始化方式1,使用拷贝初始化时候,即使用=的时候,只可以提供一个初始值 2,如果提供一个类内初始值,只可以使用拷贝初始化或者使用花括号的方式初始化 3,如果提供的是初始元素值的列表,只可以把初始值都放在花括号里面进行列表初始化,不可以使用圆括号值的初始化有些类必须明确提供初始数值,如果元素的类型不支持默认初始化,就必须提供初始的元素数值 只提供了元素的数量但是没有设定初始数值,只可以使用直接初始化 花括号里面的数值必须和元素的类型相同 vector<int> v

2020-12-15 15:02:23 107

原创 C++字符串的个人理解

Stringstring是字符串,在声明一个字符串的时候,比如string a;这个过程是在栈上进行的,但是如果给这个字符串分配内存空间,这段区间是存储在堆上的,因此最好在声明字符串的时候就要指出字符串的大小和对其进行初始化 string s1; 最好不要使用这种方式,效率低下 string s3 = "Hello";可以使用 string s4 = (10,'0');最好使用,不仅申请了一段内存空间还使用0对其进行初始化直接初始化和拷贝初始化使用等号,等号的右边是一个字符串,那么这种方式是

2020-12-14 19:11:48 100

原创 C++中vector章节iterator与const_iterator及const iterator区别

C++目前倾向于使用迭代器遍历容器中的元素,而不是使用下标访问的方式来访问容器中的元素。 可以使用iterator和const_iterator来访问元素,但是const类型的容器,那么只能用const_iterator来遍历。区别在于iterator可以改变元素的数值,但是const_iterator却不可以,主要限定在const 容器均可以++iter,而vector还可以iter-n, iter+n,n为一整型,iter1-iter2:结果是difference_type类型,表两元素的距离 c

2020-12-14 17:38:50 832 1

原创 使用gtest进行自己的单独测试的代码介绍

命令行./bin/hsm_device_apitest --gtest_filter="*aes_test" --device-type rpc --device-socket 192.168.1.108:5000命令详解进入工程文件,mkdir build,cd build 在build的文件夹下面执行cmake命令和make命令之后,会在build文件夹下面生成一个bin文件夹,里面就是可执行文件,也就是执行测试程序产生的测试可执行文件 命令行如下./bin/hsm_device_ap..

2020-12-14 10:46:06 534 1

原创 使用命令行的方式,将ini配置文件中的配置信息传递给程序

ini配置文件 {"device_type": "fake","device_socket": "192.168.1.108:5000"} 使用rpc的方式 ./bin/hsm_device_apitest --gtest_filter="*aes_test" --device-type rpc --device-socket 192.168.1.108:5000 使用fake的方式./bin/hsm_device_apitest --gtest_filter="*aes_test.

2020-12-14 10:38:09 264

原创 使用CLion的时候,对于cmake的使用

问题概述使用CLion的时候,一个大的项目会有一个总的CMakeLists.txt,这个是控制整个项目的编译环境,但是针对测试的代码会有自己的单独的CMakeLists.txt,这个单独的cmake文件是控制自己的程序所需要的环境 即使是编译单独的测试程序,也要使用Reload CMake Project,不可以使用第二个Load CMake Project,第一个是使用全局的CMake,第二个是加载单独的CMake...

2020-12-14 10:29:15 2525

原创 linux查看内核版本信息

使用命令uname -a cat /proc/version

2020-12-13 18:52:00 138 1

原创 设置clion执行前的cmake命令,和CMAKELIST.txt不冲突

具体操作如下图所示

2020-12-13 10:59:25 598

原创 启动linux的rpc服务的命令

命令 sudo service rc-local status

2020-12-13 10:54:34 1838

原创 将结构体数据存储到一段字符串string中

核心思想指定一段内存空间存储结构体数据,然后使用一个指针强制类型转化为结构体类型的,就可以使用这个指针操作结构体相关的成员函数和变量 结构体内存只会为定义的变量进行分配内存空间,函数只进行调用,不占据空间结构体 void fill_md5(const std::string &md5_digest) { assert(md5_digest.length() == sizeof(md5)); std::memcpy(md5, md5_digest.c_str(), si

2020-12-10 22:36:58 1469 1

原创 Linux环境下实现unsigned char*向string的转换

代码unsigned char input_data[input_data_length] = {"This is my first encrypted plaintext hello world"};openssl_enc_string = hsm::mgmt::aes_ecb_encrypt_to_string(static_cast<string>((const char * )input_data),password); 使用static_cast<string&g

2020-12-10 11:55:06 482

原创 使用memcmp函数判断两个函数的前n位字节数是否相等

memcmp函数的介绍头文件:#include <string.h> 定义函数:int memcmp (const void *s1, const void *s2, size_t n); 函数说明:memcmp()用来比较s1 和s2 所指的内存区间前n 个字符。 字符串大小的比较是以ASCII 码表上的顺序来决定,次顺序亦为字符的值。memcmp()首先将s1 第一个字符值减去s2 第一个字符的值,若差为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如,字符串"Ac"和"

2020-12-09 19:58:14 367

原创 使用openssl开源AES算法,实现aes、aes-cbc和aes-ecb对字符串的加解密

头文件crypto_util.h#pragma once#include <string>namespace hsm{ namespace mgmt{ void get_md5_digest(const std::string &data,uint8_t result[16]); std::string aes_encrypt_to_string(const std::string &string,

2020-12-09 19:14:09 594 1

原创 随机函数的生成

函数代码#include <string>bool GenerateRandom(std::string *str,unsigned int len){ srand(time(NULL)); for(unsigned int i=0;i<len;i++) { switch(rand()%3) { case 1: (*str).push_back('A'+rand()%

2020-12-09 17:28:45 278

原创 使用openssl完成aes-ecb模式的数据加解密,输入和输出都是字符串类型

代码#include <cstring>#include <memory>#include <openssl/aes.h>#include <openssl/md5.h>namespace hsm{ namespace mgmt{ void get_md5_digest(const std::string &data,uint8_t result[16]){ MD5_CTX md5_c

2020-12-09 17:20:09 438

原创 使用openssl完成aes-cbc模式的数据加解密,输入和输出都是字符串的形式

代码#include <cstring>#include <memory>#include <openssl/aes.h>#include <openssl/md5.h>namespace hsm{ namespace mgmt{ void get_md5_digest(const std::string &data,uint8_t result[16]){ MD5_CTX md5_c

2020-12-09 17:16:46 831 1

原创 使用openssl,实现输入和输出都是字符串的类型,注意:输入最好是16的倍数

头文件crypto_util.h#pragma once#include <string>namespace hsm{ namespace mgmt{ void get_md5_digest(const std::string &data,uint8_t result[16]); std::string aes_encrypt_to_string(const std::string &string,

2020-12-09 14:10:57 295

实现和其余平台的客户端和服务端之间进行交叉双向认证的gmssl代码

实现和其余平台的客户端和服务端之间进行交叉双向认证的gmssl代码,https://blog.csdn.net/CHYabc123456hh/article/details/127804773,https://blog.csdn.net/CHYabc123456hh/article/details/127023867,参考上述链接,分别解决tlsv1 alert decrypt error和crypto/sm2/sm2_sign.c 510: sm2_do_verifySSL3 alert write:fatal:decrypt error的错误

2023-01-06

极力推荐clion的辅助安装包

这个安装包是clion的辅助工具

2022-09-29

origin (函数绘图软件)相关配套安装软件

Origin是由OriginLab公司开发的一个科学绘图、数据分析软件,支持在Microsoft Windows下运行。Origin支持各种各样的2D/3D图形。Origin中的数据分析功能包括统计,信号处理,曲线拟合以及峰值分析。Origin中的曲线拟合是采用基于Levernberg-Marquardt算法(LMA)的非线性最小二乘法拟合。Origin强大的数据导入功能,支持多种格式的数据,包括ASCII、Excel、NI TDM、DIADem、NetCDF、SPC等等。图形输出格式多样,例如JPEG,GIF,EPS,TIFF等。内置的查询工具可通过ADO访问数据库数据。

2022-05-12

国密算法SM2_SM3_SM4演示小程序

国密算法,即国家商用密码算法。是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准。如SM系列密码,SM代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。 商用密码有很多,作为一览,我整理出下表,列举了常用的国际跟国产商密:

2021-12-20

defects4j-master.zip

Defects4J是一个很热门的Java自动程序修复、缺陷定位领域基准数据集。Defects4j数据集是14年由Michael D. Ernst老师及其合作者一起发布的Java运行时缺陷数据集,近年来已经被广泛应用在相关研究中。所以应该说这个数据集还是很有用的,其目前的项目主页:https://github.com/rjust/defects4j

2020-09-11

go-ipfs_v0.4.23_darwin-amd64.tar.gz

这个是用go语言写的用于Mac电脑的IPFS安装包,使用它我们可以进行文件的共享、上传、下载等一系例操作,我们用它来搭建属于自己的本地节点,并和其他节点相互链接

2020-04-10

空空如也

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

TA关注的人

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