![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
文章平均质量分 91
wiggens
这个作者很懒,什么都没留下…
展开
-
关于 c&c++中 atomic 变量小记
关于 c&c++中 atomic 变量小记参考:1、https://blog.csdn.net/moakun/article/details/80144900?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.42422、https://zhuanlan.zhihu.com/p/1372617813、https://www.jian.原创 2021-03-20 18:52:36 · 1464 阅读 · 0 评论 -
GLIBCXX_3.4.21' not found问题小记
问题描述:mysql启动时报错:/bin/mysqld: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /bin/mysqld)Connection closed by foreign host.lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' n...原创 2019-12-16 17:15:43 · 5404 阅读 · 4 评论 -
C++11 (多线程)并发编程总结
|线程 std::thread 创建std::thread,一般会绑定一个底层的线程。若该thread还绑定好函数对象,则即刻将该函数运行于thread的底层线程。 线程相关的很多默认是move语义,因为在常识中线程复制是很奇怪的行为。 joinable():是否可以阻塞至该thread绑定的底层线程运行完毕(倘若该thread没有绑定底层线程等情况,则不可以join) join...转载 2019-11-20 16:58:48 · 189 阅读 · 0 评论 -
函数指针与指针函数
指针函数:指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。指针函数相对简单,不多做描述。声明格式为:*类型标识符函数名(参数表)如:int *fun(int x,int y);函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。声明格式:类型说明符 (*函数名) (参数)如下:int...原创 2019-11-18 18:08:07 · 178 阅读 · 0 评论 -
CreateThread与_beginthreadex
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex?使用多线程其实是非常容易的,下面这个程序的主线程会创建了...转载 2019-04-18 15:56:55 · 179 阅读 · 0 评论 -
window环境下AES加密文件无法解密问题记录
最近在做项目中遇到需要对数据进行AES加密,加密文件用openssl命令行解密。在linux/unix 环境下测试没有问题,但在windows环境下一直解密失败,由于AES解密数据要求解密数据需16字节整数倍(AES_CBC_128,pcks5填充),考虑到windows环境下可能会对文件进行填充,决定使用二进制读写的方式进行文件读写。以下是对二进制以及其文本文件的一些理解(转):--...原创 2019-03-08 15:49:46 · 2673 阅读 · 0 评论 -
openssl 对称加密算法enc命令详解
1、对称加密算法概述openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以通过调用openssl提供的API的方式使用。openssl的对称加密算法指令主要用来对数据进行加密和解密处理,openssl基本上为所有其支持的对称加密算法都提供了指令的方式的应用,这些应用指令的名字基本上都是以对称加密算法本身的名字加上位数、加密模式...转载 2019-02-18 17:13:50 · 460 阅读 · 0 评论 -
关于const关键字的学习记录
c语言中的const意义在于告诉编辑器,我修饰的此变量为只读属性,不要试图去改变它,而c++中的const作用在于声明常量。C++编译器对const 常量的处理当碰见常量声明时,在符号表中放入常量编译过程中若发现使用常量则直接以符号表中的值替换编译过程中若发现对const 使用了extern 或者&操作符,则给对应的常量分配存储空间(兼容C),c++中若要全局使用const声明...原创 2019-01-14 10:44:35 · 92 阅读 · 0 评论 -
EVP AES_CBC加密解密记录
最近学习了openssl中AES有关加密解密的接口,以下内容为测试代码,需要注意使用EVP函数接口实现AES_CBC时需注意末尾字符的填充处理,我使用的算法为“EVP_aes_128_cbc”,需要注意的是分组加密中最小组为16字节,加密操作中使用的缓冲区需比源数据多16个字节,原因是若分组后最后一组数据不够16个字节,则按照填充规则填满至16字节,若分组后正好是16的整数倍,最后需再加一个分组,...原创 2019-01-07 11:01:29 · 3192 阅读 · 4 评论 -
xmlRpc 学习笔记
xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。一个rpc系统,必然包括2个部分:1.rpc client,用来向rpc server调用方法,并接收方法的返回数据;2.rpc server,用于响应rpc client的请求,执行方法,并回送方法执行结果。xmlrpc是一种通过网络进行过程调用的快速并且简单的方法。xmlrpc将过程调用需要的参数转换...原创 2018-12-25 12:36:17 · 1058 阅读 · 0 评论 -
openssl evp 对称加密(AES_ecb,ccb)
evp.h 封装了openssl常用密码学工具,以下主要说对称加密的接口1. 如下使用 aes_256_ecb 模式的加密解密测试代码 unsigned char key[32] = {1}; unsigned char iv[16] = {0}; unsigned char *inStr = "this is test string"; int inL...转载 2019-01-04 15:19:10 · 2641 阅读 · 0 评论 -
openssl学习问题小计
使用openssl 完成RSA大数与Pem转换测试时编译遇到以下问题:sa_change.cpp:122:37: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ printf("%s\n", BN_bn2hex(rsa->n)); ...原创 2018-12-29 17:03:47 · 1214 阅读 · 0 评论 -
C++ STL快速入门
在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表、队列等,第一次接触C++ STL后发现这些数据结构都已经给我提供好了,我直接拿去调用就好了,真是超级方便。最近的项目中也遇到了STL一些容器,所以现在自己好好总结一下STL中一些最常用的容器的使用方法,方便自己日后查阅。C++ STL中最基本以及最常用的类或容器无非就是以下几个:...转载 2018-12-18 22:25:32 · 96 阅读 · 0 评论 -
openssl 从pem中读取秘钥
openssl pem.h 中提供了关于pem格式密钥对的操作接口通常使用.pem的格式文件来保存openssl 生成的密钥对;在终端下 cat xxx.pem 可以看到 -----BEGIN RSA PRIVATE KEY-----XXXX-----END RSA PRIVATE KEY-----密钥数据进行了BASE64编码1. 示例:将生成的密钥对保存成pem文件...转载 2018-12-29 15:28:12 · 5820 阅读 · 0 评论 -
attribute小结
attribute是GNU C特色之一,在iOS用的比较广泛.系统中有许多地方使用到.attribute可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute)等.函数属性(Function Attribute)noreturn noinline always_inline pure ...转载 2019-03-26 16:05:05 · 214 阅读 · 0 评论 -
JNI学习
参看:高煥堂的课程《JNI:Java与C++的美好结合》http://edu.csdn.net/course/detail/1469参看:http://www.cnblogs.com/yejg1212/archive/2013/06/07/3125392.html参看:http://blog.csdn.net/jiangwei0910410003/article/det...转载 2019-03-29 11:03:33 · 450 阅读 · 0 评论 -
c++ map key值不为基本类型的比较
STL中的map底层是用红黑树实现的,其泛型原型如下:template <class _Key, class _Tp, class _Compare, class _Alloc>class map { ...... }其中_Key表示比较的键(key),_Tp表示值(value),_Compare表示比较方式,_All...原创 2019-04-22 14:34:25 · 7308 阅读 · 0 评论 -
__attribute__ 用法
转自:http://www.cnblogs.com/astwish/p/3460618.htmlGNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attr...转载 2019-07-21 13:18:02 · 109077 阅读 · 3 评论 -
static 静态成员变量 静态成员函数 类中使用【转】
转自:https://blog.csdn.net/swj9099/article/details/96435590关于在类中使用static的一些情况:静态成员函数和静态成员变量的调用格式,尽量采用类名::成员的格式,不要以对象来调用1. static func静态成员函数1) 其地址可以直接由函数指针来存储,普通函数其地址只能是由类中的函数指针来存储,如: cl...转载 2019-07-18 19:04:20 · 521 阅读 · 0 评论 -
处理大并发 使用libevent利器bufferevent
首先来翻译一段文章你可能注意到随着我们代码变得越来越高效,程序也变得更加复杂。当我们产生一个进程的时候,我们没有必要为每一个链接管理一个buffer,我们只需要每个处理独立栈分配缓冲区就可以了。在读和写的时候,我们不必明确的跟踪每一个socket,这在我们的代码里是一个暗示,我们没有必要定义一个结构体去跟踪每一个操作什么时候完成,我们只需要使用循环栈变量就...转载 2019-06-04 16:17:09 · 176 阅读 · 0 评论 -
记一次ssl问题测试
项目中通过ulxmlrpc实现https通信,两个线程分别运行https server端以及https client端。调试过程中发现报错:6240:error:140A90F1:SSL routines:SSL_CTX_new:unable to load ssl2 md5 routines:.\ssl\ssl_lib.c:1804:经排查问题为未进行库导入,需以下代码: SS...原创 2019-06-13 16:55:50 · 913 阅读 · 0 评论 -
C++的多态性
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数 1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚...转载 2019-05-15 16:44:00 · 275 阅读 · 0 评论 -
C++类中的静态成员变量和静态成员函数的作用
数据成员可以分为静态变量、非静态变量两种。静态成员:静态类中的成员加入static 修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态成员,因为静态成员存在于内存,所以非静态成员可以直接访问类中的静态成员。 非静态成员:所以没有加static的成员都是非静态成员,当类被实例化后,可以通过实例化的类...转载 2019-05-09 17:46:06 · 479 阅读 · 0 评论 -
STL中的map底层默认比较
大家知道,STL中的map底层是用红黑树实现的,其泛型原型如下:template <class _Key, class _Tp, class _Compare, class _Alloc>class map { ...... }其中_Key表示比较的键(key),_Tp表示值(value),_Compare表示比较方式...转载 2019-04-19 16:44:29 · 1135 阅读 · 0 评论 -
select、poll、epoll之间的区别
(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用...转载 2019-04-19 09:35:46 · 89 阅读 · 0 评论 -
C++中struct和class的区别
C++中struct和class的区别有很多人在学习C++的 时候只是了解了C++的语法,或者更高层次的人是理解了oo(面向对象),但在这样的学习过程中,往往一些最基本的问题反而被忽略了。当然,这些问题或许 在你做工程中,不会有太大的影响,只要按照平时一贯的良好编码习惯,依旧可以写出好的代码;但某些时候,或许就是这些最基本的小问题,会让你的程序BUG 难以发现,而注意到某些问题后,同时还将会提...转载 2019-04-17 17:49:47 · 1343 阅读 · 0 评论 -
AES学习笔记
AES为对称加密AES四种加密模式的区别:ECB(Electronic Code Book电子密码本)模式ECB模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。 优点: 1.简单; 2.有利于并行计算; 3.误差不会被扩散; 缺点: 1.不能隐藏明文的模式; 2.可能对明文进行主动攻击; 因此...原创 2019-01-03 16:46:32 · 219 阅读 · 0 评论 -
RSA openssl 学习
一. RSA PEM文件格式1. PEM私钥格式文件 1 2 -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- 2. PEM公钥格式文件 1 2 -----BEGIN PUBLIC KEY----- -----EN...转载 2018-12-29 09:58:17 · 282 阅读 · 0 评论 -
JSON的简单介绍以及C语言的JSON库使用
JSON概述 JSON: JavaScript 对象表示法( JavaScript Object Notation) 。是一种轻量级的数据交换格式。 它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式, 但是也使用了类似于C语言家族的习惯( 包括C、 C++、 C#、 Java、 JavaScript、 Perl、 Python等) 。这些特性使JSON成为理想的...转载 2018-12-23 21:39:22 · 775 阅读 · 0 评论 -
linux下syscall函数
NAME syscall - 间接系统调用SYNOPSIS #define _GNU_SOURCE #include <unistd.h> #include <sys/syscall.h> /* For SYS_xxx definition...转载 2017-09-08 09:25:56 · 26020 阅读 · 0 评论 -
C语言位域
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来...转载 2017-09-19 15:54:09 · 339 阅读 · 0 评论 -
va_start和va_end的使用及原理
va_start和va_end使用详解 本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表...转载 2017-12-25 17:19:12 · 198 阅读 · 0 评论 -
详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)一、初步了解——指针与取地址先看程序: #include<cstdio>int main(void){ int num = 7; int *p = &num; printf("%d 的地址是 %p\n", num, p); return 0;}...转载 2018-01-20 21:06:35 · 337 阅读 · 0 评论 -
深入理解pthread_cond_wait、pthread_cond_signal
深入理解pthread_cond_wait、pthread_cond_signal转自:http://blog.csdn.net/yeyuangen/article/details/37593533 ===============================man pthread_cond_wait的解释==========================LINUX环境下多线程...转载 2018-02-11 16:41:16 · 252 阅读 · 0 评论 -
字符串转为16进制
#include<stdio.h>#include<string.h>#include<stdarg.h>typedef unsigned char SBYTE;typedef struct { SBYTE AddrLen; /*地址长度*/ SBYTE Addr[16]; /*地址*/ SBYTE InValid; /*0:有...原创 2018-05-14 17:05:08 · 1357 阅读 · 0 评论 -
select poll epoll区别
select()系统调用提供一个机制来实现同步多元I/O: #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int select (int n, fd_set *readfds, fd_set *writefds, fd_set...转载 2018-08-01 15:23:20 · 87 阅读 · 0 评论 -
poll函数使用
poll函数 poll函数起源于SVR3,最初局限于流设备。SVR4取消了这种限制,允许poll工作在任何描述字上。poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 1.#include <poll.h> 2. 3.int poll(struct pollfd *fdarray, unsigned long nfds, int t...转载 2018-08-01 15:23:49 · 1637 阅读 · 6 评论 -
C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答...转载 2018-08-01 15:28:29 · 165 阅读 · 0 评论 -
GNU/Linux平台的C程序开发及程序运行环境
本文介绍在GNU/Linux环境下一个C程序由源代码到程序,到加载运行,最后终止的过程。同时以此过程为载体,介绍GNU/Linux平台下软件开发工具的使用。 本文以我们最常见的hello, world!为例: #include <stdio.h>main () { printf(“hello, world!\n”);} C程序生成 下图是...转载 2018-08-01 15:47:19 · 557 阅读 · 0 评论 -
volatile使用
volatile的本质:1> 编译器的优化在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致。当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。当该寄存器在因...转载 2018-10-28 09:56:08 · 261 阅读 · 0 评论