
编程笔记
Fzuim
不忘初心,方得始终!
展开
-
Linux 上生成 SSL 证书
3. 配置 Nginx 使用 SSL:一旦您成功获得了 SSL 证书,则需要配置 Nginx 以使用它。这将启动 Certbot 并自动检测 Nginx 配置文件中的域名,并为它们生成 SSL 证书。5. 重启 Nginx:运行以下命令以使 Nginx 加载新的配置并开始使用 SSL: sudo systemctl restart nginx。现在,您已经成功为您的域名生成 SSL 证书,并使用 Nginx 的 443 端口进行了配置。将 example.com 替换为您的域名。保存更改并退出文件。原创 2023-03-28 17:12:48 · 1989 阅读 · 0 评论 -
typora主题国内地址
typora主题国内地址原创 2023-02-23 09:33:27 · 558 阅读 · 0 评论 -
ubuntu扩容根目录
linux系统盘扩容原创 2022-12-07 10:15:34 · 1942 阅读 · 0 评论 -
实现ping功能
头文件#pragma once#include <Winsock2.h>#include <IPHlpApi.h>#pragma comment(lib, "Iphlpapi.lib")#pragma comment(lib, "Ws2_32.lib")typedef HANDLE(WINAPI* ICMPCREATEFILE)(VOID);typedef INT(WINAPI* ICMPCLOSEHANDLE)(HANDLE);typedef DWORD(WI原创 2021-03-02 16:21:00 · 218 阅读 · 0 评论 -
微信公众号迁移之OpenID转换-基于C++,curl,rapidjson
简单记录一下代码片段,没什么特别内容。参考微信接口API/// @brief 获取新旧openid对照/// @param old_app_id 旧服务号appid/// @param new_app_id 新服务号appid/// @param old_openid_lst 旧openid列表/// @return 成功数int CWeChatHttp::get_new_openids_from_old_openids(const std::string& old_app_id, co原创 2021-02-26 17:21:27 · 662 阅读 · 1 评论 -
PC微信dat图片导出
PC版微信图片导出PC微信图片存储位置:打开文件夹,FileStorage\Image目录即存储微信接收图片目录此目录下,图片按年月进行存储,格式都为.dat文件.经过测试发现,相同格式图片比如jpg或png,dat文件整体16进制内容格式,和jpg,png图片格式类似.且相同格式图片dat文件头部字节一致.dat文件=原始文件+某种运算其实网上有很多关于产生dat文件运算分析,结果就是:异或运算dat文件=原始文件+异或预算所以进行dat文件还原就简单了:将dat文件头两个字节和jpg/原创 2020-09-08 20:05:31 · 4254 阅读 · 0 评论 -
Windows C++程序员的知识体系
原创 2020-01-06 11:22:41 · 288 阅读 · 0 评论 -
shlwapi.dll中的实用API函数
shlwapi.dll位于windows的system目录下调用方式:#include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") BOOL PathFileExists(LPCTSTR lpszPath)功能:检查文件/路径是否存在LPTSTR PathFindFileName(LPCTSTR pPath)...原创 2019-11-06 15:27:22 · 820 阅读 · 0 评论 -
【工具类】格式化打印信息
#pragma once#include &lt;Windows.h&gt;void odprintf(PCWSTR format, ...){ va_list args; va_start(args, format); int len = _vscwprintf(format, args); if (len &gt; 0) { len +...原创 2018-03-21 10:24:27 · 418 阅读 · 0 评论 -
【编程笔记】extern “C”和.def文件和__stdcall和__cdcel的作用
动态链接库的使用有两种方式,一种是显式调用。一种是隐式调用。 (1) 显式调用:使用LoadLibrary载入动态链接库、使用GetProcAddress获取某函数地址。(2) 隐式调用:可以使用#pragma comment(lib, “XX.lib”)的方式,也可以直接将XX.lib加入到工程中。DLL的编写 编写dll时,有个重要的问题需要解决,那就是函数...转载 2018-04-04 09:52:01 · 2726 阅读 · 0 评论 -
【编程笔记】不同模块不同的堆
在linux下,每个进程只有一个heap,在任何一个动态库模块so中通过new或者malloc来分配内存的时候都是从这个唯一的heap中分配的,那么自然你在其它随便什么地方都可以释放。这个模型是简单的。但是在windows下面,问题变得复杂了。1、windows允许一个进程中有多个heap,那么这样就需要指明一块内存要在哪个heap上分配,win32的HeapAlloc函数就是这样设计的,...转载 2018-07-17 15:31:51 · 418 阅读 · 0 评论 -
【工具类】C++花式字符串操作
分割字符串void Separate(const wstring&amp; src, const wstring&amp; strSet, vector&lt;wstring&gt;&amp; container){ wstring::size_type pos = 0; pos = src.find_first_not_of(strSet, pos); w...原创 2018-07-06 14:03:23 · 747 阅读 · 0 评论 -
【工具类】ZwQuerySystemInformation枚举进程
曾经基于兴趣搞过很多小功能,但后来工作中比较少用到,代码也就安静的沉没在磁盘中。最近打算整理下之前弄过的东西,也不算荒废之前的付出吧。。。void InitProcessList(){ ZWQUERYSYSSTEMINFORMATION MyZwQuerySystemInformation = (ZWQUERYSYSSTEMINFORMATION)GetProcAddress(Get...原创 2018-07-25 09:51:06 · 836 阅读 · 0 评论 -
【编程笔记】线程池实现源码(从POCO中剥离出来)
源码下载:https://download.youkuaiyun.com/download/fzuim/10625204 CThreadPool类/***************************************************************************** * @COPYRIGHT NOTICE * @Copyright (c...原创 2018-08-24 17:47:21 · 558 阅读 · 0 评论 -
随笔20181018
随笔写点。好久没静下心,好好研究自己所感兴趣的东西。感觉有些东西学的有点过杂,什么都搞了一段时间,但后面工作中,再次使用却较少了。导致现在回想起来,有点迷茫,感觉还是有很多一知半解的地方,但后面也没花过多的时间来关注来求知。所以说,要想进步,精通,还得有很长的路要走,很多的时间要花。感觉自己感兴趣的方面很多很多,看到很多感兴趣的开源项目,想去研究去提高自己,但终究时间还是没抽出来搞。现在的状态有...原创 2018-10-18 18:59:18 · 159 阅读 · 0 评论 -
【工具类】本机获取socket对应的IP地址及MAC地址
#include &lt;winsock2.h&gt;#include &lt;Iptypes.h&gt;#include &lt;IPHlpApi.h&gt;#pragma comment(lib, "Iphlpapi.lib")#pragma comment(lib, "ws2_32.lib")BOOL GetMacAddr原创 2019-02-15 17:01:40 · 1733 阅读 · 0 评论 -
【编程笔记】Windows套接字使用总结
想到什么加什么…头文件及lib引用#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")初始化socket库WSADATA wsaData;if(WSAStartup(MAKEWORD(2, 2), &wsaData) == 0) //0代表初始化成功{ WSACleanup();}套接字...原创 2019-02-18 16:11:13 · 400 阅读 · 0 评论 -
【编程笔记】libevent探究——代码篇
代码libevent网上使用栗子很多,最基本的使用无外乎几个接口的使用,附上libevent文档说明:https://www.monkey.org/~provos/libevent/doxygen-2.0.1/index.html在libevent基础上,我们编写:服务端&客户端来进行理解,最基本的用法。服务端的创建//#define _USE_WINSOCK// EV_R...原创 2019-03-20 14:28:23 · 180 阅读 · 0 评论 -
【编程笔记】libevent探究——vs2008编译篇
编译libevnet的GitHub地址为:https://github.com/libevent/libevent我们打开其Release标签页可以看到各个发布版本,由于此次编译基于Vs2008,所以我们采用比较早期版本:v2.0.22-stable 2015年5月29号发布的版本。接下来就是从Git上下载此版本代码,解压打开后目录如下:接下来就是利用vs2008来编译libevent的...原创 2019-03-19 11:07:26 · 894 阅读 · 0 评论 -
提权方式启动进程和以当前用户token启动进程
#include <Userenv.h>#include <Psapi.h>#include <TlHelp32.h>#pragma comment(lib, "Userenv.lib")#pragma comment(lib, "psapi.lib")/***********************************************...原创 2019-04-17 09:32:52 · 909 阅读 · 0 评论 -
多线程Lock,防止同时操作数据
最近做一个项目,存在多个进程或线程同时操作Sqlite,为了防止数据库读写失败,用互斥量来实现Lock单一独占数据库资源。Lock类源代码如下:#ifndef _Lock_H#define _Lock_H#include //互斥对象锁类class Mutex{public: //创建一个匿名互斥对象 Mutex() { m_mutex = ::CreateMutex原创 2016-10-20 15:11:23 · 852 阅读 · 0 评论 -
【编程笔记】虚函数表
如果一个C++类中包含有虚函数,C++编译器在进行编译时,会通过动态联编机制,为这个类生成一个“虚函数表”。 我们通常把所有的方法都是纯虚函数的类,叫做:接口类。class BasicTable{public: virtual void Function1() = 0; virtual void Function2() = 0;};对于这个接口类里面方法的实现,...原创 2018-03-12 16:54:07 · 327 阅读 · 0 评论 -
Win32平台下OpenSSL编写SSL,TLS程序
一、简介:SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是IETF的TLS 工作组在SSL3.0基础之上提出的安全通信标准,目前版本是1.0,即RFC2246.SSL/TLS提供的安全机制可以保证应用层数据在互联网络传输不 被监听,伪造和窜改.ope...转载 2018-02-08 16:53:28 · 680 阅读 · 0 评论 -
dll导出函数
dll的导出函数#pragma once#include "stdafx.h"#ifdef API_EXPORT#define DLL_EXPORT extern "C" __declspec(dllexport)#define DLL_EXPORT_CLASS __declspec(dllexport)#else#define DLL_EXPORT extern "C" __de原创 2016-04-07 21:03:48 · 461 阅读 · 0 评论 -
C++根据加密头信息,判断文件是否为加密文件
针对某种加密程序,会对本地文件加密,并且会在文件头写入加密头信息(可以使用UE进行文件二进制查看),现在贴上一段代码:读取当前文件的加密头信息,判断该文件是否为加密文件。int CLdScanFileDlg::FileDecryptStatus( wchar_t* v_strFile,int v_iStartIndex,int v_iReadCount,wchar_t* v_strConten原创 2016-10-13 14:23:59 · 2886 阅读 · 1 评论 -
C++通过进程名获取进程句柄
记录下一段,比较常用的代码。#include <TlHelp32.h>//通过进程ID获取进程句柄HANDLE GetProcessHandle(int nID){ return OpenProcess(PROCESS_TERMINATE, FALSE, nID);}//通过进程名获取进程句柄HANDLE GetProcessHandle(LPCWSTR lpN...原创 2017-03-09 09:54:18 · 18685 阅读 · 1 评论 -
C++线程池原理
本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。为什么需要线程池 目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库转载 2017-02-22 17:35:03 · 366 阅读 · 1 评论 -
获取文件最近的修改时间
其实只是文件一些APi调用而已,贴上代码:BOOL CLdTermDlg::GetFileLastModifyTime(const CString &v_cstrFileName, CString &v_cstrLastModifyTime){ BOOL bResult = FALSE; FILETIME ftCreationTime, ftLastAccessTime, ftLast原创 2016-11-25 11:40:32 · 1603 阅读 · 0 评论 -
多线程同步问题——关键段、互斥量、事件、信号量
自己对多线程编程同步方面,从新梳理,也算复习了。^_^经典多线程同步问题:程序描述:主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参数 -> sleep(50) ->全局变量++ -> sleep(0) -> 输出参数和全局变量。要求:1.子线程输出的线程序号不能重复。2.全局变量的输出必须递增。首先拿到这个问题,原创 2016-10-27 10:18:51 · 532 阅读 · 0 评论 -
VC++根据路径遍历所有文件
最近做的一个项目,需要在VC下遍历指定路径的所有文件,和之前的Delphi所采用的方式一样:递归调用。直接贴代码BOOL CLdScanFileDlg::DoScan( const CString& v_strDir ){ theApp.m_Errorlog.AddMsgLog(L"DoScan Start", false); wchar_t chSearchPath[MAX_LONG原创 2016-10-13 14:14:35 · 1159 阅读 · 0 评论 -
算法思维——字符串压缩程序(华为2014校园招聘的机试题目)
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。 2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。要求实原创 2016-10-21 15:16:37 · 608 阅读 · 0 评论 -
C++贪吃蛇源代码
#include #include #include #include using namespace std;//界面初始化inline void Refresh(char qp[][22], int grade, int gamespeed){ system("cls"); int i, j; cout<<endl;//第一行不显示 for(i = 0; i < 22原创 2015-09-10 11:31:53 · 977 阅读 · 0 评论 -
多字节字符集和宽字节字符集区别
多字节字符集 字符编码可能是1个字节 也可能是2个字节ascii码占用1个字节存储中文(unicode)等 占用2个字节IT学吧 16进制编码 73 84 -47 -89 -80 -55 0 16进制最高位为1 代表负数 当存在负数则会把两个负数当做一个中文字符73-I 1字节84-T 1字节-47 -89 -学 2字节-80 -55 -吧 2字节原创 2016-03-30 10:02:26 · 1507 阅读 · 0 评论 -
字符串转换问题
1)wstring 转BSTRwstring str = L"";BSTR bstr = (BSTR)(str.c_str()); 2)wstring 转 CComBSTRwstring str = L"";CComBSTR pbstr;CComBSTRpbstr(str.c_str()) 3)CComBSTR 转 BSTR*CComBSTR bstr;原创 2015-12-09 15:38:04 · 636 阅读 · 0 评论 -
【开源项目】FileZilla源码自带线程封装
#if !defined(AFX_THREAD_H__67621B15_8724_4B5D_9343_7667075C89F2__INCLUDED_)#define AFX_THREAD_H__67621B15_8724_4B5D_9343_7667075C89F2__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER >原创 2018-02-02 13:51:26 · 965 阅读 · 0 评论 -
【工具类】VLD(Visual LeakDetector)内存泄露库的使用
VLD简介由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一定的困难。当您的程序越来越复杂时,它的内存管理也会变得越来越困难。内存泄漏、内存越界是最常见的内存问题之一。 内存泄漏如果不是很严重的话,在短时间内对程序不会造成太大的影响,而且在进程终止的时候,所有分配的内存都会释放掉。但是对于长时间运行的程序,其破坏力是惊人的,从...转载 2017-11-29 10:49:29 · 311 阅读 · 0 评论 -
C++操作Sqlite数据库
这篇文章,主要介绍的是:利用网上封装好操作sqlite3的类CppSQLite3DB,来进行数据的操作。由于源码是开放的,所以可以很清楚的知道执行open操作时,到底用了哪些Sqlite3接口,这里不再做详细介绍。1、下载CppSQLite3.h和CppSQLite3.cpp这个封装好的源码文件;2、下载Sqlite3文件,不知道的可以网上搜索下,主要有sqlite3.dll,sqlite3.h文...原创 2017-05-08 15:04:47 · 2160 阅读 · 0 评论 -
【编程笔记】UNICODE和UTF-8和ASCII互转
最近维护一个项目时发现,MFC的Cstring类型写到ini文本时,出现了乱码。因为写入的数据带有类似的特殊字符❀,由于ini默认创建的编码格式为GBK编码格式,但是这个特殊字符在默认的GBK编码下是不能识别的,会以?的形式存在。那这个特殊字符的编码是什么,暂时还没搞清楚。但是既然知道存在这样的bug,那么我们就有了相应的解决方法:在写入ini文件时,先将unicode编码的内容转成utf-8(u...原创 2017-05-25 16:10:23 · 3754 阅读 · 0 评论 -
【工具类】通过进程令牌启动新的进程
对于进程令牌(Token)比较常用的就是:explorer.exe这个进程的令牌,那么我们就以这个为例,通过explorer.exe的进程令牌启动一个新进程。启动进程的API为:CreateProcessAsUser。首先获取explorer.exe的进程令牌Token:lpName我们传:"EXPLORER.EXE",返回的令牌在hToken;BOOL GetTokenByName...原创 2017-05-27 15:33:25 · 999 阅读 · 0 评论 -
C++计算当前时间点间隔N天的时间(不使用CTimeSpan类)
涉及到有效期的设置,需要计算N天时间间隔的时间。其实这只是个工具代码,记录下与己方便,便是与人方便。。#define QUADPART 10000000i64std::string CalTime(int v_nTimeSpan){ char chTime[MAX_PATH] = {0}; SYSTEMTIME Curtime; SYSTEMTIME OutTime; GetL原创 2017-03-10 16:31:42 · 1875 阅读 · 1 评论