C++
文章平均质量分 51
feng_blog6688
这个作者很懒,什么都没留下…
展开
-
libdbus 实例以及使用d-feet查看接口方法
libdbus 实例以及使用d-feet查看接口方法libdbus介绍总线 linux系统进程间通过dbus通信,D-BUS由总线构成,总线分为两种,系统总线(system-bus)和会话总线(session-bus)。系统总线在引导时就会启动,这个总线由操作系统和后台进程使用,安全性非常好,以使得任意的应用程序不能欺骗系统事件.会话总线在用户登陆后启动,属于用户私有,是用户进程用来通信的一个会话总线。如果一个应用程序需要接收来自系统总线的消息,可以直接连接到系统总线 —— 不过,它可以发送的消原创 2022-05-18 15:43:50 · 1155 阅读 · 0 评论 -
zlib库自定义接口封装
zlib库自定义接口封装zlib封装类说明编译zlib库编译自定义接口静态库测试代码代码-文件链接zlib封装类说明实现对文件以及文件夹的压缩解压缩.zip_unzip.h`#ifndef ZIP_UNZIP_H#define ZIP_UNZIP_H#include #include #include #include <type_traits>#include #include <string.h>#include #include <sys/s原创 2022-04-28 15:53:12 · 797 阅读 · 0 评论 -
2021-09-06 c++11实现最简单的线程池模型
c++11实现最简单的线程池模型 线程池主要解决频繁执行一类任务,避免多次创建线程造成系统资源消耗。线程池可以实现任务执行体复用,减少了线程的创建频率。主要用到如下知识点:知识点std::thread c++11支持的线程库对象,支持高并发,拷贝构造函数(被禁用),意味着 std::thread 对象不可拷贝构造。如何创建一个thread对象,采用以下方法:void f1(){ std::cout<<"f1"<<std::endl;}void f2(int原创 2021-09-06 16:45:02 · 254 阅读 · 0 评论 -
system进程创建当前登录用户进程
以下函数调用后创建当前用户的进程,前提是当前执行的进程以system权限运行。BOOL _CreateProcessAsUser(LPSTR command_line, PROCESS_INFORMATION &pi){ BOOL ret = FALSE; DWORD sessionId = 0; HANDLE hToken = NULL; HANDLE hTokenLink = NULL; HANDLE hTokenUser = NULL; STARTUPINFOA si; LU原创 2021-09-01 13:50:04 · 491 阅读 · 0 评论 -
qmake生成makefile,生成core dump文件
qmake生成makefile,生成core dump文件新建build文件夹mkdir build把Makefile文件生成到build目录下qt creator 生成.pro文件,qmake生成makefile文件,需要运行qmake -o Makefile ../*.pro[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8APn8Srs-1630460025861)(./pics/toMakefile.png)]编译生成可执行文件make1 、当程原创 2021-09-01 09:35:13 · 606 阅读 · 0 评论 -
标准c++/vs/qt 循环语句使用
std::list<int> intList{ 1,2,3,4,5 }; //C++11 标准 for (int var : intList) { std::cout << var; } //VS 特有,非C++标准,不推荐使用 for each(int var in intList) { std::cout << var; } //Qt 特有 fo...原创 2021-05-26 13:42:06 · 315 阅读 · 0 评论 -
log4cplus--通过配置文件输出日志文件
log4cplus配置文件示例日志等级log4cplus 提供的日志等级如下:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF举例来说:如果定义了日志等级为 ERROR,那么只有标记为 ERROR, FATAL的日志信息才会被记录如果等级为 DEBUG,则所有标记为 DEBUG/INFO/WARN/ERROR/FATAL 的日志才会被记录ALL和OFF级别用来将所有其他类型的级别分别切换原创 2021-04-19 14:00:00 · 2608 阅读 · 0 评论 -
log4cpus--介绍
log4cplus介绍 log4cplus是一个线程安全的c++日志API库,从log4j修改而来。wiki介绍:https://sourceforge.net/p/log4cplus/wiki/Home/log4cplus文档 API文档地址:https://log4cplus.sourceforge.io/docs/html/index.htmllog4cplus示例 示例地址:https://sourceforge.net/p/log4cplus/wiki/CodeExamples/原创 2021-04-16 15:10:50 · 158 阅读 · 0 评论 -
log4cplus--日志框架编译及测试
log4cplus日志框架编译及测试编译库需要下载log4cplus,ThreadPool, Catch三个项目工程,把ThreadPool源文件和Catch源文件放到log4cplus相应目录里。#执行以下命令sudo ./configuresudo makesudo make install运行结果,库文件安装到/usr/local/lib,头文件安装到/usr/local/include测试demo测试程序路径:https://sourceforge.net/p/log4cplu原创 2021-04-16 11:18:01 · 336 阅读 · 0 评论 -
c++11-线程池实现以及应用
c++11-线程池实现注:本文参考源于csdn博客一般来说实现一个线程池主要包括以下4个组成部分:**1)线程管理器:**用于创建并管理线程池。**2)工作线程:**线程池中实际执行任务的线程。在初始化线程时会预先创建好固定数目的线程在池中,这些初始化的线程一般处于空闲状态,一般不占用CPU,占用较小的内存空间。**3)任务接口:**每个任务必须实现的接口,当线程池的任务队列中有可执行任务时,被空闲的工作线程调去执行(线程的闲与忙是通过互斥量实现的,跟前面文章中的设置标志位差不多),把任务抽象出来原创 2021-04-09 16:16:14 · 433 阅读 · 0 评论 -
Unicode字符集下多字节与宽字符转换
Unicode字符集下格式各种字符串转换字符类型有三种编码格式:1:SBCS (single byte character set)单字节字符集。在这种编码格式下,所有字符都用一个字节表示。ASCII码就是单字节字符。用“0”来表示一个字节的结束。2 :Unicode 是一种所有的字符都使用两个字节编码的编码模式。Unicode 字符有时也被称作 宽字符。3:MBCS (multi-byte characters set)多字节字符集。在windows里面 MBCS 包含两种字符类型:单字节字符(s原创 2020-12-18 15:07:45 · 316 阅读 · 0 评论 -
windows获取登录用户名以及SID
LPWSTR GetLoginSid(){ HANDLE hToken; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken)) { printf("[!]OpenProcessToken error\n"); return 0; } DWORD Size, UserSize, DomainSize; SID *sid; SID_NAME_USE SidType; TCHAR User.原创 2020-12-11 15:26:29 · 1953 阅读 · 0 评论 -
字节串与字符串相互转换的代码
字节串与字符串相互转换的代码:inline std::string hexStrTobytes(unsigned char * cHex, int nHexLen){ std::string strBytes; unsigned char pTemp; for(int i=0; i<nHexLen; i=i+2) { if(cHex[i]>='A' && cHex[i]<='F') {原创 2020-10-12 10:31:58 · 177 阅读 · 0 评论 -
duilib-自定义曲线控件
duilib-自定义曲线控件duilib现有的控件继承图如下:从上图可以看出常见的控件都是由CControlUI继承而来,因此如果需要自定义控件,可以继承CControlUI,重写子类。如何做一个类似windows任务管理器的曲线控件,如下图所示:自定义曲线控件展示如下:下面详细说明如何在duilib源码中自定义曲线控件,以及如何在xml中设置控件属性。1、重写控件类CChartCtrlUI,继承于CLabelUI或者CControlUI,控件类CChartCtrlUI中必须重写的函数方法如原创 2020-08-20 17:40:03 · 2255 阅读 · 9 评论 -
windows性能计数器status code解释
ValueMeaningPDH_CSTATUS_NO_MACHINEPDH was unable to connect to the computer specified in the counter path. If this status is returned when the counter is being added, the counter is not completely initialized. Each time the query is updated, PDH...原创 2020-08-14 13:09:14 · 363 阅读 · 0 评论 -
DLL注入与卸载(用于hook api)
DLL注入与卸载代码参考网上,最后做个小工具可以加载dll并注入到目标进程1、判断系统版本,winxp win7 win vista win10DWORD checkOS(){ OSVERSIONINFO os_version; os_version.dwOSVersionInfoSize = sizeof(os_version); if (GetVersionEx(&os_version)) { if (os_version.dwMajorVersion == 5) {原创 2020-08-04 14:22:32 · 1287 阅读 · 0 评论 -
c++11学习一
1 函数模板namespace tl{ template <typename T> void swap(T & t1, T & t2) { T tmpT; tmpT = t1; t1 = t2; t2 = tmpT; }}2 类模板template <class T> class Stack { public: Stack(); ~Stack(); void push(T t);原创 2020-07-24 09:06:25 · 110 阅读 · 0 评论 -
获取windows已安装应用列表
windows系统安装的软件在注册表中有记录,路径为:注册表根句柄KEY_LOCAL_MACHINE,路径为"Software\Microsoft\Windows\CurrentVersion\Uninstall",涉及到32位应用和64位应用,如果是64位系统,32位的应用则存放在"Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall",64位应用则存放在"Software\Microsoft\Windows\CurrentVers原创 2020-07-09 16:43:18 · 8436 阅读 · 3 评论 -
三、字符串操作
1、UNICODE_STRING windows内核编码字符集采用unicode字符集,字符串处理使用UNICODE_STRING,是一个结构体,定义如下:typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength;#ifdef MIDL_PASS [size_is(MaximumLength / 2), length_is((Length) / 2) ] USHORT * Buffer;#els原创 2020-07-03 13:54:39 · 335 阅读 · 0 评论 -
Win API使用记录--RtlCopyMemory与RtlMoveMemory区别
1、RtlCopyMemory与RtlMoveMemory 这两个函数是内核函数api,对应Win32 API是CopyMemory和MoveMemory。都能实现内存块的复制,两者的区别在于CopyMemory是非重叠内存区域的复制,MoveMemory可以不考虑是否重叠,都可以安全复制。CopyMemory实现如下:void *memmcpy(void *dest , const void *src , size_t count) { assert( (dest ...原创 2020-07-02 10:11:08 · 3402 阅读 · 0 评论 -
管道通信相关知识总结
管道概念管道是进程间通信使用的一种共享内存的方式,创建管道的进程称为管道服务器,连接管道的进程成为管道客户端。进程间通过管道方式,一个进程往管道写入数据,另一个进程从管道取数据,类似socket通信从buf缓冲区读写数据,管道操作也类似文件读写。管道分为匿名管道和命名管道,文中主要介绍命名管道操作。匿名管道匿名管道,没有名称,而且是单工模式,就是两个进程只能一个进程往管道写入数据,另一个进程往管道区数据,而且匿名管道只能使用在父进程与子进程之间,因此如果想要在局域网内使用管道通信,不能使用匿名管道。原创 2020-06-28 18:31:06 · 626 阅读 · 0 评论 -
VS c++编译过程中遇到的问题及解决总结[更新中]
1、问题:LNK1104:无法打开lib文件 LINK : fatal error LNK1104: 无法打开文件“libboost_date_time-vc141-mt-gd-x64-1_71.lib” 解决:[项目属性]->[链接器]->[附加库目录] 添加相应的lib文件的路径,在[链接器]->[输入] 输入lib文件 或者在源码中...原创 2019-12-13 16:36:51 · 1186 阅读 · 0 评论 -
win7和win10下的dll远程注入代码和inline hook 进程隐藏
win7和win10远程注入dll的代码不通用,归纳代码如下判断当前系统类型:DWORD checkOS(){ OSVERSIONINFO os_version; os_version.dwOSVersionInfoSize = sizeof(os_version); if (GetVersionEx(&os_version)) { if (os_version...原创 2019-09-06 16:53:21 · 3027 阅读 · 2 评论 -
libevent创建服务器程序
libevent安装方法$ apt-get install git$ git clone https://github.com/libevent/libevent.git$ cd libevent$ apt-get install cmake$ apt-get install libssl-dev$ mkdir build && cd build$ cmake .....原创 2018-07-17 15:47:49 · 788 阅读 · 0 评论 -
C++ string类型和char类型转换
在C++常用的字符串对象类string,有很多实用的类成员函数,比如求字符串的长度,查找字符串的子串,字符串连接等等我们使用C语言的一些处理字符串的函数的时候,由于我们使用的是string类对象,所以需要转化一下,由string-->char类型转换这时候需要时候c_str()函数,作用就是实现string-->char的转换。原创 2015-05-29 09:48:24 · 648 阅读 · 0 评论 -
VS2017编译boost1.7
1、在开始菜单找到适用于vs2017的X86_X64兼容工具命令提示进入boost目录下b2.exe所在目录编译32位lib:b2 stage --toolset=msvc-14.0 architecture=x86 address-model=32 --stagedir=".\lib32\vc14_x86" link=static runtime-link=static thread...原创 2019-07-03 15:37:03 · 3065 阅读 · 2 评论 -
控制台程序接收命令行参数
如果通过CreateProcess创建进程来调用控制台程序,那么在传递命令参数时需要加上 空格,如果不加上空格,argv是无法获取到参数的,示例如下主程序: nError = ::CreateProcess(cCmdFile, L" -s", NULL, NULL, FALSE, NORMAL...原创 2019-06-13 10:52:31 · 2612 阅读 · 0 评论 -
Socket客户端动态库程序
1、头文件 ClientDll.h#ifndef CLIENTDLL_H#define CLIENTDLL_H#define DLLEXPORT __declspec(dllexport)#define DLLIMPORT __declspec(dllimport)#include <winsock2.h>#pragma comment (lib,"ws2_32.li...原创 2018-12-13 09:47:19 · 674 阅读 · 0 评论 -
C++浮点型输出保留小数位
int main(){float f = 1.23456;cout.precision(3);cout.setf(ios::fixed);cout }原创 2015-08-28 09:58:30 · 2916 阅读 · 0 评论 -
面向对象的基本知识
面向对象的三个基本特征是:封装、继承、多态。封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下转载 2015-06-09 10:50:30 · 340 阅读 · 0 评论 -
linux 命令
编译程序缺少头文件的自动处理: sudo auto-apt rum ./configure络设置命令 ifconfig eth0 //查看网卡信息 ifconfig eth0 192.168.220.xx //设置ip ifconfig eth0 hw ether 12:34:56:78:23:56 //设置mac地址,多用于开发板ifiifconf原创 2015-06-07 11:10:25 · 355 阅读 · 0 评论 -
UNIX 环境高级编程
时钟时间是:进程运行的时间总量,与系统中同时运行的进程数量有关 用户CPU时间:执行用户指令所用的时间,系统CPU时间是该进程内核程序所经历的时间 unix 操作系统,linux是其改进版本。原创 2015-06-07 11:09:14 · 353 阅读 · 0 评论 -
gdb调试命令
编译的时候 使用gcc -g first.c -o first插入断点: break main 主函数处加断点 break(b)num num行处加断点 break first.c num 多个文件加断点 break first 从函数开始处执行 执行程序 run (原创 2015-06-07 11:01:55 · 269 阅读 · 0 评论 -
opencv的imread函数无法读取图像
今天在用OpenCV测试程序的时候发现imread函数无法读取图像,而利用C函数cvLoadImage时却能读取到图像。几经考证,发现的确是由于库关联的问题。也就是在Debug模式下应该选择带'd'的lib,在Release模式下就选择不带'd'的lib。而实际我们在配置OpenCV环境的时候往往图方便将Debug和Release的目录都一起加了进去,再修改起来也比较麻烦。所以这时候最简单原创 2015-05-16 18:28:43 · 3448 阅读 · 0 评论 -
环境变量
环境变量是提供了一个标识,在该标识下对应一个路径,一些应用程序会通过该标识去识别路径下的应用程序执行文件。我们通过 我的电脑(右击)-》属性-》高级-》环境变量 来设置环境变量 Path,多个路径用‘;’隔开。通过命令行下 path命令可以查看当前已经设置的环境变量。原创 2015-05-16 18:16:33 · 549 阅读 · 0 评论 -
C++ 创建文件夹
头文件:windows.h函数:CreateDirectory(lpNewDirectory String,lpSecurityAttributes SECURITY_ATTRIBUTES)第一个参数表示新建目录名字,第二个参数表示安全属性示例程序,当前目录下创建文件#include void main(){ CreateDirectory("newf原创 2015-05-16 15:49:27 · 899 阅读 · 0 评论 -
linux文件属性及权限修改
Linux文件的基本属性有9个,分别是owner/group/others组别的read/write/ excute属性r:4、w:2、x:1更改文件属性的命令 chmod1)同一组(owner/group/others)的3个属性(r/w/x)是需要累加的,例如当属性为 [-rwxrwx---] 则是:owner = rwx = 4+2+1 = 7group = rwx =原创 2015-05-16 18:33:07 · 453 阅读 · 0 评论 -
C++ 读文件为什么最后一个字符会多读一次
一般判断读文件的结束条件 !fin.eof(),当读到文件结束时,fin.eof()并不会立即返回1,所以最后一个字符就多读了一次,如何避免这种情况发生,需要加上一个条件:int main(){ uchar c; ifstream in("2.txt"); while (!in.eof()) { in >> c; if (in.fail()) { break;原创 2015-05-16 18:23:25 · 3013 阅读 · 0 评论 -
Hash_map的使用
hash_map的用法和map是一样的,提供了 insert,size,count等操作,并且里面的元素也是以pair类型来存贮的。虽然对外部提供的函数和数据类型是一致的,但是其底层实现是完全不同的,map底层的数据结构是rb_tree而,hansh_map却是哈希表来实现的。void main(){ hash_map hm; hm.insert(pair(19, "jiang"));原创 2015-08-05 11:05:51 · 493 阅读 · 0 评论 -
字符串处理
1、strstr(source,des)该函数返回的是des在source中首次出现的位置,如果des不在source中,则返回NULL。int main(){ string s = "jiang"; s = s + s; cout << s << endl; cout << s.length() << endl; char des[] = "angj"; if (strstr(原创 2015-08-21 10:47:32 · 350 阅读 · 0 评论