- 博客(42)
- 资源 (2)
- 收藏
- 关注
原创 libcurl 的 curl_easy_setopt()
CURL *hCurl = curl_easy_init();curl_easy_setopt(hCurl, CURLOPT_SSL_VERIFYPEER, 1L);curl_easy_setopt(hCurl, CURLOPT_SSL_VERIFYHOST, 2L);1、HTTPS相关(1)CURL_VERIFY_PEER默认值为1,该参数表示是否验证HTTPS证书的合法性,就是用第三方证书机构颁发的CA数字证书来解密服务端返回的证书,来验证其合法性。可在编译时就将CA数字证书编译进去,.
2022-05-25 19:17:13
1223
原创 python和c/c++两者的变量区别
程序是由变量和函数组成的,变量是数据的载体,通过变量传入函数,完成对数据的处理后,返回新的变量。对于C/C++而言,程序员可以明确指定传递方式的,主要有:值传递、指针传递、引用传递。对于python而言,不允许程序员选择采用传值还是传引用,参数传递采用的是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(dict、list、set、bytearry)的引用,就能修改对象的原始值,相当于‘传引用’来传递对象。如果函数收到的是一个不可变对象(int、doubl
2022-03-21 10:56:27
1665
原创 C/C++ 常见的内存泄露案例
在编程工作生涯中本人亲自写出的的或者见过的内存泄露案例记录。(1)使用三方C语言库错误情景分析:例如一些三方开源的C语言动态库,如:openssl等,API使用比较复杂,完成一个完整的逻辑需要调用多个API函数,其中会传入一些指针,由库提供的API函数帮用户完成对象的创建,同时也会提供相应的释放或销毁API函数,但往往再用完后就会忘记主动调用释放函数,来释放这些指针,造成内存的泄露。避坑指南:在使用三方不熟悉的库时,一定要自己先写一个死循环的Demo程序,运行起来之后,观看内存的变化。确
2022-03-21 09:58:53
1828
1
原创 linux select函数陷阱
代码样例一(正确用法):while (true) { FD_ZERO(&readfds); FD_SET(socket_fd, &readfds); time_wait.tv_sec = 0; time_wait.tv_usec = 500000; ret = select(socket_fd+1, &readfds, NULL, NULL, &time_wait); if ((ret <= 0) || (!F..
2021-10-26 11:56:09
493
原创 linux(Ubuntu)安装(更新)cmake
1、cmake官方下载编译好的包cmake官方已经给你做了各个操作系统的编译安装包,找到对应的操作系统下载。连接:https://cmake.org/files/v3.21/我这里需要的版本是:cmake-3.21.0-linux-x86_64.tar.gz如果需要windows或者mac的亦或是 linux64位的请找对应的版本就行。下载:aria2c -s 4 -c https://cmake.org/files/v3.21/cmake-3.21.0-linux-x86_64..
2021-07-19 16:01:32
759
原创 使用 openssl 计算 base64(防止内存泄露)
#include "openssl/bio.h"#include "openssl/evp.h"#include "openssl/buffer.h"int base64(const unsigned char *src, int src_len, unsigned char *dst, int *dst_len) { BIO *bio_hnd_mem = NULL; BIO *bio_hnd_meth = NULL; BUF_MEM *buf_mem_ptr = NUL.
2021-06-01 19:32:33
834
原创 c/c++ 字符串string转整数int和浮点数float
支持的字符串类型有:十六进制类型,例如:"0x123","0X123"整数类型,例如:"1000","-1000"浮点数类型,例如:"0x789","0X789","1.345","-1.345","1.23e-5", "1.23E-5","-1.23E+5"#include <stdio.h>#include <string.h>#include <stdlib.h>bool str_to_int(const char* str, con..
2021-05-17 15:19:11
927
原创 用docker打造一个ubuntu开发环境
1.背景我们在做ubuntu应用开发时,手中的开发电脑搭载的操作系统一般是windows或者macos。大多数人都会选择安装VMware或者VirtualBox。然后下载ubuntu对应发行版本的iso镜像安装一个虚拟机。而我们开发人员只需要借助ubuntu的编译器编译自己的代码而已,安装一个完整桌面版的ubuntu虚拟机显然太耗费个人电脑的资源了。因此,可以选择安装一个docker容器,小巧精简。下面介绍一下我在我个人MAC电脑上搭建ubuntu开发容器的过程。2.环境搭建2.1.
2021-03-26 14:22:43
7938
2
原创 yaml-cpp的实际使用注意事项
1、YAML语法yaml类似于json、xml。是一种标记语法。1.1、YAML语法基本规则(1)关于大小写:大小写敏感(2)关于层级关系:使用缩进表示层级关系,但缩进不允许使用tab,只允许空格。缩进的空格数不重要,只要相同层级的元素左对齐即可(3)支持注释:注释以'#'开头1.2、YAML 支持的数据类型:(1)对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)(2)数组:一组按次序排列的值,
2021-02-05 16:21:55
5804
1
原创 linux下使用tcpdump工具分析UDP报文
1、背景在调试UDP协议时,总是会遇到需要查看UDP报文的内容情况,或许是为了验证自己写的序列化组包是否正确,或者接受到的报文是否合法,亦或是为了查看自己发送或者接收的报文频率是否合格。无论出于什么目的,都要查看报文原始内容。而linux就提供了这样一个命令行工具tcpdump。2、tcpdump工具使用方式简介:tcpdump命令行工具的详细使用方法,可以仔细通读man手册。man tcpdump参数有很多,但如果掌握如下几个参数就可以满足大部分的调试场景了:-i:in.
2021-02-05 15:14:21
5069
原创 MacOS将远程Linux服务器挂载到本地目录
1、安装brew软件安装工具brew类似于ubuntu的apt-get,centos的yum。具体安装brew的方式可以百度搜索一下。2、安装fuse和sshfs2.1、安装fusesshfs依赖于fuse,因此首先安装fuse。当然你可以直接安装sshfs,那样会提示你依赖的fuse不存在,安装会出错。% brew install fuse安装过程中会从github上拉取代码,由于网络问题偶尔会出现拉取代码出错,可以多试几次。安装完成后重启一下你的MacOS。.
2021-01-12 14:22:34
2644
1
原创 python RSA 公钥解密方法
背景常见的RSA加解密使用方式是:公钥加密,私钥解密。私钥签名,公钥验签。但我在项目上却遇到了一个用python解决公钥解密的问题。查了好多资料最后完成了这需求,记录一下。解决1、代码示例import base64from rsa import core, PublicKey, transform def public_key_decrypt(rsa_public_key_der_b64, qr_code_cipher_b64): qr_co..
2020-12-22 12:29:41
6597
4
原创 python的定时任务(线程)
背景当我们在写业务逻辑时,常常会用到一些定时触发的任务,比如定时清理、定时补偿、定时报警、定时同步、定时发送等等等。这些任务一般是轻量级的,因此使用一个线程去处理即可。介绍两种实现方式,方式一是使用python内建模块sched,方式二是使用第三方模块schedule。内建sched模块sched模块实现了一个通用事件调度器,在调度器类使用一个延迟函数等待特定的时间,执行指定的任务(函数)。同时支持多线程应用程序,在每个任务执行后会立刻调用延时函数,以确保其他线程也能执行。step.
2020-09-22 10:07:14
1476
原创 alpine linux 安裝python指定版本以及pip
1、准备1.1、安装编译器apk add build-base //安装 GCC等工具1.2、安装编译时的依赖库apk add --no-cache -U zlib-dev //安装zlib-develapk add --no-cache -U openssl-dev //安装openssl-devel2、下载指定版本的python源码手动下载:https://www.python.org/downloads/source/命令下载:wget https://...
2020-08-05 10:40:40
10365
1
原创 python pip install 常见错误 (leveldb numpy gevent 等)
1、背景项目中需要使用Alpine Linux,并且运行python程序,于是使用docker启动了一个alpine容器。但是由于Alpine Linux是超精简Linux发行版,里面除了内核外,其他工具或者组件全都没有。因此,想要运行Python程序,必须安装Python环境。安装完python之后,python程序依赖的包却不存在,因此,需要pip install 安装一些依赖包,但是通过apk add安装的python不带pip工具。于是,开始安装pip。安装完pip之后,通过pi
2020-08-03 12:28:57
1094
1
原创 pip3 ImportError: cannot import name ‘main‘的解决办法
使用pip3时出现如下错误:Traceback (most recent call last): File "/usr/bin/pip3", line 9, in <module> from pip import mainImportError: cannot import name 'main'解决方法:网上了一些大概总结如下:1、把 /...
2019-10-15 17:50:25
447
原创 linux下安装配置arm交叉编译器
1、下载并解压交叉编译压缩包一般由芯片厂商提供,也可以通过网上下载。2、修改编译器目录bin下可执行程序名字。由于有的编译的名字并不是arm-linux-***的格式,这样用起来并不是很方便,可以通过ln命令创建软连接,建议编写一个shell脚本,内容如下:#!/bin/shsudo ln -s arm-linux-gnueabi-addr2line arm-linux-addr...
2019-05-27 16:16:36
4554
原创 ubuntu下搭建QT开发环境
1、下载最新Qtcreator(IDE)下载链接:http://download.qt.io/development_releases/qtcreator/建议下载最新版本,功能最丰富。2、下载QT源码下载地址:http://download.qt.io/archive/qt/例如:qt-everywhere-opensource-src-4.8.5.tar.gz下载...
2019-05-24 14:03:06
1305
原创 ubuntu卸载安装的方式
1、查找已经安装的插件查看全部:dpkg -l查看相关 :dpkg -l | grep <筛选目标>例如:dpkg -l | grep gcc2、卸载apt-get remove <dpkg -l的结果>例如:apt-get remove libgcc-4.8-dev注意:卸载过程中会有依赖关系而产生报错,需要自己确认相互依赖的关系,遵循...
2019-05-24 11:59:08
1131
原创 JNI 使用注意事项
前言: 如果你是为了让Java调用C语言,使用复杂的JNI大可不必,可以选择更简单便捷安全的方式——JNA。当然,如果用C调用Java,那就只能用JNI了。JNI使用复杂,尤其是提供的函数使用时一定要注意内存问题。因为Java层申请内存后是没有内存释放的,完全依赖java虚拟机来释放,而C层不然,必须时刻谨记申请的内存一定要及时释放。JNI函数大全可参考:https://www.c...
2018-10-30 17:42:50
1228
原创 Linux下使用Git上传和更新代码(GitHub或码云)
一、上传代码1、去github(码云)上根据网站的提示来创建自己的远程Repository(仓库)2、建立本地git仓库 $ git init注意:此指令本地源码根目录执行,执行成功后,会在当前目录生成一个隐藏的名字为“.git”的目录。所有对本地仓库的操作信息都在此目录下存储。3、将项目的所有文件添加到本地仓库中 $ git add .说明:此处...
2018-09-06 10:32:33
11152
原创 Ubuntu下Codeblocks::IDE的控制台程序中文显示乱码
1、修改Codeblocks的控制台终端,在Setting -> Environment... -> Gerneral settings中修改如下图所示位置:默认的是 xterm的终端,改为 Ubuntu的gnome终端。2、如果ubuntu是英文的,需要添加中文支持执行第一条指令:sudo locale-gen zh_CN.GB18030 ( 关于locale-gen...
2018-08-17 15:52:21
869
原创 Ubuntu下使用SCM Micro’s SDI011双界面读卡器驱动
1、安装libusb下载libusb源码,解压,编译,安装2、安装pcsclite下载pcsclite源码解压,编译,安装./configure –enable-libusb –disable-libudev –enable-usbdropdir=/usr/local/pcsc/driversmakesudo make install(说明:如果上述1和2步骤无法进行,可以...
2018-08-15 14:26:36
1802
原创 Ubuntu下安装并使用pcsclite
linux安装并使用pcsclite库,当然可以使用最直接的方法,先下载源码,然后编译并安装,这种方式很普遍,但很繁琐,不仅需要下载pcsc的源码,还要下载所有依赖的库源码,并且都要编译安装。我接下来介绍的方式比较简单。1、下载deb包Ubuntu其实已经做好了pcsclite的安装包了,只需要下载下来即可 https://launchpad.net/ubuntu/+source/pc...
2018-08-10 14:30:48
6697
原创 MFC中控件Group属性的理解
Group属性有以下特点: 特点1:同一组内所有控件类型相同。 特点2:同一组内设置为Group属性的控件,大于其ID,小于下一个有Group属性的控件的ID的所有控件都是该组中的控件。 特点3:同一组内的所有控件是互斥的。 特点4:同一组中所有的控件只能由一个变量进行关联。举例说明:如上图,窗口上有6个Radio控件,将其分为两组A和B。R...
2018-07-19 10:22:37
4752
原创 Window,VS开发:CString 转 char*
由于VS中字符编码分为Unicode字符集和多字节字符集,所以字符串转char*的情况分为两种,要分别对待。intCStrToUChar(unsignedchar*pChar,CString&pCString){#ifCHARACTER_CODEDING_UNICODE //Unicode字符集 intlen; len=WideChar...
2018-07-19 10:20:43
298
原创 Libtool源码在Linux环境下编译成win32的动态库
1、linux下安装交叉编译器——mingw32我用的是ubuntu虚拟机,直接使用终端命令安装即可:sudo apt-get install mingw32。注意:如果此处安装失败,原因可能是Ubuntu系统的软件更新源有问题,换一下软件源即可。具体方法问度娘。2、编译libtool下载libtool源码解压libtool软件包进入解压后的lbtool目录,阅读readm...
2018-07-19 10:06:58
1285
原创 Linux环境下交叉编译 GmSSL库
1. Github下载GmSSL2. 编译本机平台的库(参考README.md) $ ./config $ make $ sudo make install3. 交叉编译(参考Configure) $ ./Configure --cross-compile-prefix arm-linux- (注:此处的arm-linux-是我使用的交叉编译,请根据实际需...
2018-07-19 09:56:15
2859
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人