C/C++
文章平均质量分 87
C与C++相关知识总结
alwaysrun
当你站在山顶的时候,你的头上还有星空。
展开
-
[C++]-网络库mongoose简介
Mongoose是C语言网络库,为TCP、UDP、HTTP、WebSocket、CoAP、MQTT实现了事件驱动型的非阻塞api。原创 2022-02-03 22:33:07 · 8005 阅读 · 3 评论 -
[C++]-yml库yaml-cpp简介
介绍了yaml的基本语法,以及开源操作库yaml-cpp与基本使用。原创 2022-02-20 20:24:40 · 10040 阅读 · 8 评论 -
[C++]-JSON库nlohmann简介
文章目录nlohmann库声明与构造解析与序列化获取与修改value是否存在contains查找findflattenitems类型判断结构体json示例nlohmann/json 是一个用于解析json的开源c++库,使用方便直观。nlohmann库nlohmann库(https://github.com/nlohmann/json)提供了丰富而且符合直觉的接口(https://json.nlohmann.me/api/basic_json/),只需导入头文件即可使用,方便整合到项目中。声明与构造原创 2022-02-05 11:44:03 · 13397 阅读 · 0 评论 -
[C++]-日志记录库SPDLog简介
文章目录spdlog库日志记录槽sink日志记录器logger输出格式pattern对齐方式截断字符串格式化fmtFormat Specificationspdlog使用异常处理logger基础用法stdout日志文件日志基本文件循环文件每日文件示例spdlog是一款开源的、快速的日志库。spdlog库spdlog是基于C++11实现的一款纯头文件的日志管理库(git地址:https://github.com/gabime/spdlog,API说明:https://spdlog.docsforge.c原创 2022-02-02 18:44:41 · 10355 阅读 · 0 评论 -
C++11右值语义与类型转换
文章目录右值语义深浅拷贝左值与右值右值引用纯右值与将亡值函数万能引用引用折叠完美转发类型转换右值是C++11中新出现的特性,可以提高性能,减少拷贝开销。右值语义有移动构造与赋值的类示例:class MyString{public: MyString() : m_pData(NULL), m_nLen(0) { cout << "Default constructor" << endl; } MyString(const ch原创 2022-01-08 20:08:22 · 658 阅读 · 0 评论 -
[C++]-VSCode+Makefile编译C++
文章目录开发C++源文件MakefileVSCode配置taskproperties在《VSCode+WSL开发环境》中,已经介绍了VSCode+WSL如何进行开发;本文将介绍如何使用makefile来编译C++程序。开发以编译子文件夹下的文件为例,目录结构如下:C++源文件源文件中,以vector为例,如何使用移动构造,以及快速清空vector:#include <iostream>#include <vector>#include <memory>原创 2022-01-01 12:47:56 · 8462 阅读 · 1 评论 -
BOOST的JSON解析库Boost.JSON简介
文章目录JSON库基础objectvaluearraystringJSON使用构造JSON序列化对象序列化反序列化对象反序列化流输入Boost很早就有了能解析JSON的库(Boost.PropertyTree)还能解析XML,INI和INFO等。但其笨重复杂。在1.75后引入了新的JSON解析库Boost.JSON。JSON库基础JSON中主要包括四种数据类型:object、value、array和string;要使用JSON功能,需要:#include <boost/json.hpp>原创 2021-12-26 18:27:09 · 10776 阅读 · 0 评论 -
通过UDP广播自动获取IP地址
有时服务端地址是不固定的,需要自动获取;此时就可以通过UDP广播来方便地实现;给出了对应实现的客户端与服务端代码示例原创 2008-11-06 10:54:00 · 10346 阅读 · 1 评论 -
[Util]-VSCode+WSL开发环境
Windows下如何升级WSL,以及VSCode的快捷键;以及如何远程Linux和wsl原创 2021-10-01 18:27:44 · 1863 阅读 · 0 评论 -
[C++]-浅谈const
文章目录const使用定义常量指针函数修饰参数修饰返回值转换为非constconst成员函数const 是不变的,不易改变的意思。在 C++ 中可用来修饰内置类型变量、自定义对象、成员函数、返回值、函数参数。const使用const可以保护修饰的对象,防止意外修改;并有助于优化,提升性能(如const常量可能都不需要为其分配内存)。定义常量const修饰的变量为常量(声明时必须初始化),与宏类似,但更安全。以下两者方式是等价的:<TYPE> const name = value;c原创 2021-09-14 08:04:37 · 122 阅读 · 0 评论 -
C++内存分配之new与delete
[TOC]C++中在堆内存中创建和销毁对象需要借助关键字new和delete来完成,new和delete既是C++中的关键字也是一种特殊的运算符。内存分配C++中有多种内存分配、释放方式:分配释放类属可否重载malloc()free()C函数不可newdeleteC++表达式不可::operator new()::operator delete()C++函数可allocator::allocate()allocator::deallo.原创 2021-09-12 13:11:47 · 480 阅读 · 0 评论 -
编程语言之沧海拾贝
各编程语言C++、Java、golang、Python,以及数据库MySQL相关的精彩文章件列表,以及开发工具、Linux软件和Typora使用文章列表原创 2021-06-24 21:20:30 · 685 阅读 · 1 评论 -
[C++]-C++基本输入及读取整行
文章目录标准输入流cin`>>`cn.get整行读取std::getlinecin.getlinecin.getC++标准库提供了一组丰富的输入/输出功能。C++的I/O发生在流中,流是字节序列:如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。标准输入流预定义的cin 是 iostream 类的一个实例。cin 对象附属到标准输入设备,通常是键盘;cin 与流提取运原创 2021-02-17 14:48:57 · 5788 阅读 · 1 评论 -
[C++]-Linux中创建Daemon程序
文章目录守护进程后台进程编写守护进程forkdaemonLinux中的守护进程(daemon进程)相当于Windows中的后台服务程序,一直运行于后台。守护进程Linux中,每一个与用户进行交流的界面称为终端,每一个从此终端允许的进程都会依附于此终端,因此这个终端也称为这些进程的控制终端;当控制终端被关闭时,相应的进程都会自动关闭。若不想让进程因终端的关闭或变化而受影响,就需要把进程变为守护进程。守护进程(Daemon进程)是脱离于终端(避免进程在执行过程中的信息在任何终端上显示,且进程也不会被任何原创 2021-02-15 12:33:37 · 572 阅读 · 0 评论 -
C++中位运算与应用
文章目录位运算简单操作复杂位操作位运算案例交换整数求二进制中1个数字符串的组合找相同位1的整数位运算是C/C++中的基本运算,位运算允许程序员操作数据的某一特定位。位运算位运算由位运算操作符和操作数组成,不同的位运算操作符定义了不同的位运算。操作符示例说明~~expr翻转expr的每一个位:1变0,0变1&expr1&expr2在每个位所在处,如果expr1和expr2都含有1,那么结果该位为1,否则为0|expr1 | expr2在每个原创 2020-12-21 23:02:37 · 404 阅读 · 0 评论 -
编程语言与数据库语句集锦
数据库(mysql)的常用操作语句;C++、python、go语言等的一些有意义小函数示例原创 2020-10-20 21:02:25 · 671 阅读 · 0 评论 -
C++中执行shell命令并获取返回值
文章目录popen函数简介示例演示Linux下C++中执行shell命令可以有多种方式:system函数、exec族函数等,但最灵活的还是popen。popen函数简介通过popen创建子进程,执行对应命令,并通过fgets获取输出,然后pclose关闭并获取执行结果:popen:创建一个管道;pclose:关闭I/O流,等待命令执行结束,然后返回shell的终止状态(执行结果);函数定义:FILE * popen(const char *command , const char *typ原创 2020-11-14 19:34:34 · 4839 阅读 · 2 评论 -
WSL安装与Clion远程调试配置
文章目录安装 WSL启用安装WSL文件位置WSL配置更改源ssh配置ssh连接Clion远程调试Ubuntu上安装开发环境Clion配置CMakeLists示例其他Windows Subsystem for Linux(简称WSL)是一个为在Windows10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。安装 WSL要安装Linux需要先启用WSL。启用打开: 控制面板 -> 程序和功能 -> 启用或关闭windows功能勾选“适用于Linux的Windows子系统原创 2020-10-19 20:54:23 · 4378 阅读 · 1 评论 -
[C++]使用Jansson生成与解析json字符串
文章目录安装配置序列化与反序列化生成Json解析JsonJansson是一个用于解码、编码、操控JSON的C库:简单直观的API和数据模型没有依赖项完整的Unicode支持(UTF-8)安装要使用Jansson,则需要先安装:下载jansson(http://www.digip.org/jansson/releases)解压(tar -xvf jansson-XXX.tar.bz2)下载后即可安装了./configure --prefix=/opt/janssonmakesu原创 2020-10-17 22:25:03 · 2025 阅读 · 0 评论 -
libCurl实现HTTP请求
接口说明使用步骤setopt函数部分选项说明示例写数据回调GET请求POST请求libCurl是一个多协议、跨平台的客户端URL传输库;使用libCurl可方便地进行HTTP请求。接口说明libCurl提供easy interface和multi interface两种HTTP请求方式;本文主要是easy interface的使用说明。使用步骤libCurl主要采用Callback方式完成数据传输,设置好参数后和回调函数后,在满足条件时会自动调用相应的回调函数实现对应功能。一般按如下顺序调用:.原创 2020-10-02 21:28:21 · 3496 阅读 · 1 评论 -
Ubantu下glog编译安装与使用简介
安装使用glog是google的开源日志系统,相比log4系列的日志系统,它更加轻巧灵活,而且功能也比较完善。安装glog使用gflags来解析参数,为此需要先安装gflags。gflags安装从git clone https://github.com/gflags/gflags下载后,编译安装。进入gflags源码目录:mkdirbuildcdbuild/cmake-DBUILD_SHARED_LIBS=ON-DBUILD_STATIC_LIBS=ON...原创 2020-09-05 14:00:44 · 1682 阅读 · 0 评论 -
GDB 调试指南
00 介绍GDB(GNU Debugger)是 UNIX 及 UNIX-like 下的强大调试工具,可以调试 ada, c, c++, asm, minimal, d, fortran, objective-c, go, java,pascal 等语言,这一份指南我们主要以 c 来作为例子。01 基础1.1 判断程序是否可调试# gdb helloworldReading symbols from helloWorld...(no debugging symbols found)..转载 2020-07-31 20:49:31 · 1100 阅读 · 0 评论 -
[C++]-Windows下获取CPU、内存利用率
CPU利用率内存利用率在《Windows下使用PDH获取性能计数器(CPU、内存、网络流量等)》中介绍了通过性能计数器获取计算机性能信息,若只是获取CPU利用率及内存利用率,可以直接通过API获取。Windows提供了相关函数来获取: GetSystemTimes:获取CPU的空闲、内核、用户使用时间; GetProcessTimes:获取进程的内核、用户使用时间,以及创建、退出时间等; GlobalMemoryStatusEx:获取内存相关的详细信息; CPU利.原创 2020-05-29 21:30:06 · 8688 阅读 · 0 评论 -
Windows下使用PDH获取性能计数器(CPU、内存、网络流量等)
性能计数器获取计数网卡接口Perfmon(运行命令perfmon.msc或perfmon即可打开)性能监视器主要用来对指定的系统性能指标进行实时监控。Windows提供Pdh(performance data helper)库,方便通过程序获取里面的性能计数信息。性能计数器Windows通过计数器(Counter)提供操作系统、程序、服务以及驱动等的信息,以便对系统进行监视或查找性能瓶颈。Windows提供了多种方式获取性能计数,下图展示了消费者(获取计数器的程序)、注册表...原创 2020-05-24 13:59:23 · 4783 阅读 · 0 评论 -
[C++]-Windows下Socket连接之客户端
连接接收发送在《[C++]-Windows下Socket连接之服务端》中介绍了Windows下Socket编程的一些基本知识与服务端实现,现在介绍一下客户端的实现。相比于服务端,客户端流程相对简单些,主要就是: 连接服务端; 收发消息 此客户端实现,除发送接口外,其他的都使用IOCP(I/O Completion Port,I/O完成端口)接口WSAXXX。IOCP是性能良好的I/O模型,可以支持大并发(通过完成端口,避免大量线程的创建),更适合在服务端使用。等待服务端应答及退出原创 2020-05-23 09:50:55 · 854 阅读 · 0 评论 -
[C++]-Windows下Socket连接之服务端
辅助函数TCP服务端Socket即套接字,用于网络通讯,有三种模式:流式套接字(SOCK_STREAM) 数据报套接字(SOCK_DGRAM) 原始套接字(SOCK_RAW)辅助函数Windows下提供了WSAXXX系列函数来辅助Socket的开发。为了使用这些函数需要:#include<WinSock2.h>#include<WS2tcpip.h>#include<Mswsock.h>#pragmacomment(lib...原创 2020-05-17 16:53:12 · 434 阅读 · 0 评论 -
条件变量condition_variable存在的一些问题
C++11中完善了信号量与条件变量(参见:C++11中线程及信号量与条件变量),但是condition_variable的一些实现是存在问题的,特别是在Windows下会很容易出现假唤醒的情形(VS2015的实现,在Win10下非常容易出现,而Win7下偶尔出现)。为避免此种假唤醒情形,需要使用带Predicate参数的重载接口,以下是Event接口的模拟实现:classXuEvent{//Nosignalwheninitpublic:voidwait(){...原创 2020-05-09 19:14:51 · 593 阅读 · 0 评论 -
C++11中字符串与数值间转换
数值转字符串字符串转数值有符号整数值无符号整数值浮点数C++11中提供了字符串与数值类型间直接转换的函数(定义在<string>头文件)。数值转字符串c++11提供了to_string方法,将各种数值类型转换为字符串类型:std::stringto_string(intvalue);std::stringto_string(longvalue);s...原创 2020-05-05 17:52:03 · 534 阅读 · 0 评论 -
C++中实现字符串分割split
C++默认没有提供字符串分割函数,若要对字符串进行分割则需自己处理。首先想到的就是使用string::find函数查找到指定的分隔符,然后通过substr截取子串,来实现字符串的分割。更方便的方式:C++提供了从输入流中获取子串的getline,配合istringstream,即能方便地实现字符串的分割操作:istream& getline (istream& is, ...原创 2020-05-04 22:52:16 · 2030 阅读 · 0 评论 -
C++11日期时间显示(精确到毫秒)
C++11中提供了方便时间操作的chrono库(参见C++11时间日期库chrono简介),但是其输出显示并不方便;通过put_time可以显示时间(到秒),要显示毫秒,就需要自己处理了。使用duration_cast可以把时间点转换为不同的形式(并把时间截断为对应的精度);因此,通过把要显示的时间转换为毫秒与秒,然后求其之间的差值,就能得到所需的毫秒。#include<ctim...原创 2020-05-02 21:04:27 · 7726 阅读 · 3 评论 -
C++11 Lambda表达式简介
Lambda简介Capture列表mutable说明C++11中的Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda简介Lambda表达式一般都是从方括号[]开始,然后结束于花括号{},主要包括五个部分:[捕获列表 capture]:对外部变量的捕获方式说明,是必须的; (操作符重载函数参数 params):没有参数及修饰时可省略,是可选...原创 2020-04-30 18:19:58 · 177 阅读 · 0 评论 -
pjSIP收发自定义媒体
会议桥自定义媒体端口在《pjSIP注册呼叫流程简介》中介绍了pjSIP注册与呼叫的基本流程,本节对自定义媒体流与端口做下介绍。会议桥pjSIP中通过会议桥(Conference)把媒体流(Stream)与抽象音频设备端口(Sound Device Port)连接起来(并负责各路媒体的混流);他们之间数据传递都是通过pjmedia_port接口来实现的。若要收发自定义的媒...原创 2020-01-30 21:04:06 · 2177 阅读 · 1 评论 -
pjSIP注册呼叫流程简介
注册注销电话呼叫在《SIP开源库pjSIP简介》中介绍了pjSIP的基本框架,本节对pjSIP中SIP的注册与呼叫具体流程进行简要说明。注册注销SIP通过register进行注册请求: 终端向VoIP服务器发送register请求:URL中包含注册服务器的域名地址,To头域中包含准备生成的地址记录,Contact头域中表明此次注册所要绑定的地址(其中Expire表示绑定...原创 2020-01-11 18:59:54 · 4787 阅读 · 0 评论 -
C++11时间日期库chrono简介
时钟与时间点时间间隔chrono是C++11中新加入的时间日期操作库,可以方便地进行时间日期操作,主要包含了:duration, time_point, clock。时钟与时间点chrono中用time_point模板类表示时间点,其支持基本算术操作;不同时钟clock分别返回其对应类型的时间点。clock时钟是从一个时点开始,按照某个刻度的计数;chrono同时提供...原创 2019-12-20 20:01:39 · 1023 阅读 · 0 评论 -
C++11随机数简介
随机数简介随机数应用C++11之前随机数都是使用C函数库rand来生成,此函数生成均匀分布的伪随机数(0~32767);C++11中对随机数生成进行增强。随机数简介C++11在<random>中定义了一组类用于实现随机数: 随机数引擎类:生成随机数 随机数分布类:生成满足指定分布的随机数 随机数引擎标准库提供了一个非确定性随机数生成设备ra...原创 2019-12-14 19:53:31 · 867 阅读 · 0 评论 -
C++迭代器简介与定制
迭代器基础算法中应用创建迭代器迭代器是C++中非常重要的概念,是STL工具集中的重要一环。迭代器有很多类型,各自有其局限性。 输入迭代器:只能取指向的值,当迭代器自加后,之前指向的值就不可访问(不用此类迭代器在一个范围内遍历多次),典型的如std::istream_iterator。 前向迭代器:类似输入迭代器只能前进,但在指定范围内可迭代多次,典型的如std::...原创 2019-12-11 20:01:11 · 327 阅读 · 0 评论 -
C++输出cout格式控制与定制
输出格式制输出cout是STL库中的iostream实例,用于格式化输出。输出格式化格式相关操作需包含<iomanip>,标志位等定义在<ios>或<iostream>中。控制函数格式控制的成员一般有对应的控制符(在cout输出中使用)。precision(n):对应setprecision(n),设置实数的精度; width...原创 2019-12-10 20:00:11 · 682 阅读 · 2 评论 -
C++11中线程及信号量与条件变量
线程互斥量与条件变量C++11对线程支持有很大的提升(参见C++11线程thread与任务async),可以方便地处理线程。同时提供了互斥量与条件变量,可方便处理类似消费者-生产者问题。线程C++11中对线程提供了良好的支持,通过thread即可直接创建线程,同时通过promise,future,packaged_task以及async提供了对线程控制的能力。threa...原创 2019-11-29 20:01:41 · 3897 阅读 · 2 评论 -
C语言中宏简介
无参宏定义带参宏定义固定参数宏可变参数宏多语句宏处理连接符条件判断常见预定义宏宏在C语言中是一段有名称的代码片段(使用#define定义),在预处理阶段会把程序中的宏名替换为对应的代码片段,然后才进入编译阶段由编译器进行编译。#define:宏定义 #undef:取消宏定义 #ifdef:判断宏是否定义无参宏定义最简单的宏定义时间用指定的标识符来代表代码片段,当宏定义有多行时,需...原创 2019-11-22 19:56:19 · 2582 阅读 · 0 评论 -
How to Avoid Multiple Instances of Your Windows Application
Introduction <br />This is one of the most oft asked questions and different solutions are given to it. I had earlier published this little tip/trick about this. With the simple class shown there, it is no doubt possible to maintain just one instance b转载 2010-10-22 11:14:00 · 1083 阅读 · 0 评论