- 博客(108)
- 收藏
- 关注
原创 Base64编码解码(一)——介绍
1. Base64是什么?Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法什么是“可打印字符”?为什么要用它来传输8Bit字节码?首先,在回答这两个问题之前我们有必要来思考一下什么情况下需要使用到Base64。Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输...
2020-04-20 22:07:13 4746 1
原创 Linux学习(一)——常用命令
0. Linux各种目录/bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。/etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,目录下是用户的文件/lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库...
2020-04-18 20:04:36 391
原创 BOOST库介绍(八)——deadline_timer
转自:https://www.cnblogs.com/xuaidongstdudyrecording/p/6077639.htmlboost::asio::deadline_timer并发与并行: 并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。所有的Asio类只要简单的包含"asi...
2020-04-18 12:18:35 941
原创 BOOST库介绍(七)——时间处理相关的库
时间处理库的时间功能位于名字空间boost::posix_time,它提供了微妙级别(最高可达纳秒)的时间系统,使用需要包含头文件"boost\date_time\posix_time\posix_time.hpp"。时间长度类time_durationtime_duration也有几个子类:hours、minutes、seconds、millisec、microsec、nanosec,他们都...
2020-04-18 10:38:28 680
原创 BOOST库介绍(六)——容器
any:是一种通用的数据类型,可以将类型包装后统一放在容器中,最重要的是它是类型安全的。使用方法:any::type() 返回包装的类型any_cast可用于any到其他类型的转化#include <boost/any.hpp> void test_any() { typedef std::vector<boost::any> many; many a;...
2020-04-18 10:36:51 243
原创 BOOST库介绍(五)——智能指针shared_ptr
shared_ptr是一个最像指针的“智能指针”,它实现了引用计数型的智能指针,可以自由的拷贝和赋值,在任意的地方共享它,当没有代码使用它是才删除被包装的动态分配的对象。shared_ptr也可以安全的放在标准容器中,可以像使用指针以用使用shared_ptr。性能和使用指针相差无几,却能有效的防止内存泄露。...
2020-04-18 10:35:28 136
原创 BOOST库介绍(四)——文件系统相关
文件系统相关的方法一般都在boost::filesystem命名空间中boost::filesystem::path filepath(path);filepath.parent_path();//获取父路径filepath.filename();//包括文件扩展名boost::filesystem::file_size(filepath);//获取文件大小,单位是字节boost::fi...
2020-04-18 10:34:00 235
原创 BOOST库介绍(三)——网络编程相关的库
boost::asio网络编程分为同步模式和异步模式:同步模式是有一个数据块客户端发送过来,服务端就必须处理完才能处理下一个数据块;异步模式是客户端发送的数据块放入缓存队列;异步处理不阻塞,同步模式是阻塞式的。① 同步模式服务端:// 创建服务器对象boost::asio::io_service ios;//asio编程必须io_service对象,服务端和客户端创建socket...
2020-04-18 10:32:19 662
原创 BOOST库介绍(二)——BOOST多线程相关库
boost::threadboost::thread(boost::bind(&class::func,this)).detach()thread()启动一个线程;bind() 函数绑定器,线程绑定需要执行的任务,接一个函数指针;#include <iostream>#include <boost/thread.hpp>#include <boo...
2020-04-18 10:30:53 248
原创 BOOST库介绍(一)——什么是boost库
Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉。它由C++标准委员会部分成员所设立的Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简洁、优雅、灵活和高效。boos...
2020-04-18 10:27:12 4597
原创 TCP长连接(KeepAlive)
转自:https://blog.csdn.net/chrisnotfound/article/details/801115591. TCP Keepalive的起源TCP协议中有长连接和短连接之分。短连接环境下,数据交互完毕后,主动释放连接;长连接的环境下,进行一次数据交互后,很长一段时间内无数据交互时,客户端可能意外断电、死机、崩溃、重启,还是中间路由网络无故断开,这些TCP连接并未来得...
2020-04-17 23:27:20 1920
原创 代码学习记录
1. STDMETHODSTDMETHOD,定义了一个返回HRESULT类型的虚方法举例说明:写一个如下的函数STDMETHOD(fun)(int i)其展开以后变成:virtual HRESULT __stdcall fun(int i); 这样就定义了一个虚函数fun。当然,这个虚函数只能放在接口定义中,所以STDMETHOD宏是用于定义接口用,放在头文件中用。2. vo...
2020-04-17 22:46:10 1022
原创 C++并发与多线程
1. 基本概念1.1 并发并发:多个任务同时进行;一个程序同时执行多个独立任务以往的单核CPU ,同一时刻只能先执行一个任务。由于操作系统的调度,每秒进行多次的任务切换;这不是真正的并发,这种上写文切换需要时间开销的;硬件发展现在出现了多核CPU计算机,能够真正并行执行多个任务;1.2 可执行程序windows下:.exe磁盘下的一个文件1.3 进程和线程可执行程序运行起来就是一个...
2020-04-17 16:13:38 357
原创 WaitForSingleObject
函数功能使用WaitForSingleObject函数来等待一个内核对象变为已通知状态函数原型DWORD WaitForSingleObject(HANDLE hObject, //指明一个内核对象的句柄DWORD dwMilliseconds); //等待时间函数参数函数返回值该函数需要传递一个内核对象句柄,该句柄标识一个内核对象① 如果该内核对象处于未通知状态,则该函数导致...
2020-04-13 19:54:32 1480
原创 SOCKET编程详解
1. Socket通信流程补充解释:IP地址:相当于写信时的地址;端口号:相当于收件人;IP地址可以保证找到网络上的哪台电脑,端口号保证找到电脑上对应的程序。2. 函数介绍2.1 WSAstartup函数功能加载socket库,使用socket之前必须调用此函数。函数原型int WSAstratup ( _In_ WORD wVersionRequested, _O...
2020-04-12 15:50:16 1151
原创 QueueUserWorkItem函数
函数说明在计算机程序中,线程是一种很重要的资源,使用的恰当可以极大的提高程序的效率,也就是多线程的使用,但是多线程会让应用程序变得异常复杂,会占用大量的系统资源。就像QQ表情一样,每一个QQ表情的闪动都需要构建一个线程,如果用户使用了大量的表情,将会有多少个线程在运行,系统的性能将大大减少,甚至导致死机。在这种情况下,多线程变得不太合适了,那么什么机制适用于这种情况下呢,这就是线程池。通常情况...
2020-04-10 09:40:08 2249
原创 Process相关函数
函数功能用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。基本原理执行一个外部程序实质上可以认为就是创建一个进程windows系统下创建一个进程意味着:① 创建一个内核对象:内核对象是windows系统用于管理进程的一个工具,可以认为是一个数据结构。② 创建一个地址空间:用于存放可执行文件的代码和数据当调用CreateProcess()时,windows会自动创建一个...
2020-04-09 18:21:36 1857
原创 GetFileAttributes
函数功能返回指定目录或文件的文件属性。函数原型DWORD WINAPI GetFileAttributes(__in LPCTSTR lpFileName);函数参数lpFileName [in]文件或目录的名字,对于ANSI版本,名字不能大于MAX_PATH(260)。函数返回值如果函数成功,返回值包含文件或目录的属性(属性列表见备注)。如果函数失败,返回值是INVALID...
2020-04-09 13:09:27 1112
原创 FindFirstFile和FindNextFile
函数原型 HANDLE FindFirstFile( LPCTSTR lpFileName, // 目录名 LPWIN32_FIND_DATA lpFindFileData // 数据缓冲区);函数参数lpFileName[输入] 指向字符串的指针用于指定一个有效的目录。lpFindFileData[输出] 指向一个WIN32_FIND_DATA的指针,用于存放...
2020-04-09 12:48:37 1818
原创 使用SHELLEXECUTEINFO 和 ShellExecuteEx
1. SHELLEXECUTEINFO原型:typedef struct _SHELLEXECUTEINFO { DWORD cbSize; ULONG fMask; HWND hwnd; LPCTSTR lpVerb; LPCTSTR lpFile; LPCTSTR lpParameters; ...
2020-04-09 09:40:21 549
原创 4、http编程——setsockopt函数
函数原型int setsockopt( int sockfd, int level, int optname, const void *optval, socklen_t optlen);函数参数sockfd:标识一个套接口的描述字level:被设置的选项的级别;支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6。optna...
2020-04-08 16:02:03 101
原创 2、http网络编程——libcurl的使用
1. libcurl介绍libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。官网 http://curl.haxx.se/在基于LibC...
2020-04-08 15:39:45 529
原创 3、http网络编程——struct linger
TCP连接断开的时候调用close socket函数,有优雅的断开和强制断开两种方式.那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。struct linger { int l_onoff; int l_linger;};三种断开方式:① l_onoff = 0; l_linger忽略close()立刻返回,底层会将未发送完的数据发送完...
2020-04-08 15:24:34 160
原创 1、http网络编程——URL、CURL、CURLcode和curl_slist
1. URLURL是Uniform Resource Loctor的缩写,即统一资源定位器,它是一个识别Internet中哪里有信息资源,并且将Internet提供的服务统一编址的系统。URL作用:通过URL可以到达任何一个地方寻找需要的东西,比如文件、数据库、图像、新闻组等等,可以这样说,URL是Internet上的地址簿接下来,以此为例介绍URL的组成部分:http://www.asp...
2020-04-08 13:52:18 1824
原创 VS报错—— This function or variable may be unsafe
属性——C/C++——预处理器——添加_CRT_SECURE_NO_WARNINGS
2020-04-07 12:01:28 128
原创 VS报错——无法打开文件XXX.lib
添加lib文件:配置属性–>链接器–>输入–>附加依赖项加入库名(×××.lib);或者是在cpp源文件中用#pragma comment(lib,“×××.lib”)来代替。此时编译会提示:fatal error LNK1104: 无法打开文件“×××.lib”,原因是编译器找不到lib文件。给项目添加库文件路径配置属性–>链接器–>常规–>附加目录...
2020-04-07 12:00:08 7770
原创 Google Breakpad的使用
在Windows下使用breakpad的方法很简单,只需要创建一个ExceptionHandler的类即可1.进程内抓取Dump文件进程内抓取Dump文件是最简单的breakpad的用法。使用方法很简单:const std::wstring s_strCrashDir = L"c:\dumps"; bool InitBreakpad(){ google_breakpad::Exce...
2020-04-05 17:02:42 1140
原创 C++使用命名管道使用进程间通信
1. 管道介绍2. 通信过程命名管道在进程间传输数据是基于连接且可靠的传输方式,所以命名管道传输数据只能一对一。使用命名管道的步骤如下:① 创建命名管道命名管道通过调用函数CreateNamedPipe()创建函数原型:HANDLE WINAPI CreateNamedPipe( _In_ LPCTSTR lpName, _In_ ...
2020-04-04 23:10:07 891
原创 1. C++dump编程
1. dump文件介绍1.1 什么是dump文件Dump 文件是进程的内存镜像 , 可以把程序的执行状态通过调试器保存到dump文件中 ;Dump 文件是用来给驱动程序编写人员调试驱动程序用的 , 这种文件必须用专用工具软件打开 , 比如使用 WinDbg , VisualStudio 打开 ;当我们的程序发布出去之后 , 在客户机上是无法跟踪自己代码的 BUG 的 , 所以 Dump 文...
2020-04-04 18:51:16 2456 1
原创 FindFirstFile
函数功能查找指定目录的第一个文件或目录并返回它的句柄==函数原型 == HANDLE FindFirstFile( LPCTSTR lpFileName, // 目录名 LPWIN32_FIND_DATA lpFindFileData // 数据缓冲区);参数:lpFileName[输入] 指向字符串的指针用于指定一个有效的目录。lpFindFileData[输出] 指...
2020-04-04 10:30:22 671
原创 OutputDebugString
OutputDebugString输出调试信息的时候一般是在DEBUG模式下,不过如果不加控制条件,在release模式下也可以使用OutputDebugStringA输出普通字符串的数据信息OutputDebugStringW输出宽字节类型的数据信息...
2020-04-04 10:15:22 806
原创 va_list介绍
va_list是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应,用起来是很灵活。va_list表示可变参数列表类型,实际上就是一个char指针fmt。c语言提供了函数的不定长参数使用,比如 void func(int a, …)。三个省略号,表示了不定长...
2020-04-04 09:59:23 8305 3
原创 GetCommandLine()和CommandLineToArgvW()
函数原型LPTSTR GetCommandLine(void);函数功能win32可执行程序分为两种类型,基于控制台(Consol-based)的和基于窗口(Windows-based)的。基于控制台程序它的入口函数是传统的main,基于窗口的则是WinMain。这两个入口函数一大区别是对于命令行参数的处理。窗口应用程序的运行需要命令行参数的支持,即WinMain函数第三个参数,举个例子...
2020-04-04 09:47:13 2479
原创 CommandLineToArgvW
函数原型LPWSTR * CommandLineToArgvW( LPCWSTR lpCmdLine, int *pNumArgs);函数参数lpCmdLine指向包含完整命令行的以空结尾的Unicode字符串的指针。如果此参数为空字符串,则函数返回当前可执行文件的路径。pNumArgs指向一个int的指针,该int接收返回的数组元素数,类似于argc。函数返回值...
2020-04-04 09:41:54 3406
原创 WaitForMultipleObjects用法详解
函数原型DWORD WaitForMultipleObjects(DWORD nCount, CONST HANDLE *lpHandles,BOOL fWaitAll, DWORD dwMilliseconds );函数参数nCount 句柄的数量 最大值为MAXIMUM_WAIT_OBJECTS(64)HANDLE 句柄数组的指针fWaitAll 等待的类型,如果为TR...
2020-04-03 20:35:58 264
原创 TransactNamedPipe函数
函数原型BOOL TransactNamedPipe( HANDLE hNamedPipe, // handle to named pipe //打开的命名管道句柄,由创建服务器端的命名管道函数或客户端的打开命名管道函数返回 LPVOID lpInBuffer, // pointer to write buffer DWORD nInBuffer...
2020-04-03 18:53:13 752
原创 SetNamedPipeHandleState
函数原型BOOL SetNamedPipeHandleState( HANDLE hNamedPipe, LPDWORD lpMode, LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout);函数参数hNamedPipe此参数可以是CreateNamedPipe函数返回的管道服务器端的句柄,也可以是Cr...
2020-04-03 17:58:07 781
原创 CreateFile和WriteFile
函数功能CreateFile 函数创建或打开下列对象,并返回一个可以用来访问这些对象的句柄。文件pipes邮槽通信资源磁盘驱动器(仅适用于 windowsNT )控制台文件夹(仅用于打开)函数原型HANDLE CreateFile( LPCTSTR lpFileName, // 指向文件名的指针 DWORD dwDesiredAccess, // 访问模式(写...
2020-04-03 17:42:53 622
原创 InitializeSecurityDescriptor、InitializeAcl、AddAccessAllowedAce、SetSecurityDescriptorDacl
1. InitializeSecurityDescriptor函数原型BOOL InitializeSecurityDescriptor( PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD dwRevision);函数参数pSecurityDescriptor指向函数初始化的 SECURITY_DES...
2020-04-03 17:38:04 1594
原创 C++各种文件的作用
1. 总体说明.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。附加依赖项的是.lib不是.dll。若生成了dll,则肯定也生成 lib文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果要使动态连接的程序运行起来,有dll就够了(放在Debug文件夹里)。在开发和调试阶段,当然最好都有。.h .lib .dll三者的关系是:.h文件:声明函数接口.d...
2020-04-03 14:32:21 821
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人