C/C++
文章平均质量分 84
学习记录
夏天匆匆2过
生于忧患死于安乐
展开
-
C/C++高性能服务器网络库框架libhv源码解读
信号处理,日志,资源池,线程池错误,命令行参数,配置文件,堆,缓存,链表,队列,红黑树,MultiMap,JSON,tcp,udp,http,WebSocket事件循环,事件循环线程,事件循环线程池,定时器,网络IO,异步自定义事件,epoll,poll,select,iocp(win),kqueue(OS_BSD/OS_MAC),evport(OS_SOLARIS)。6、协议编码:gRPC,rudp,kcp,ssl,tls,mqtt,dns,ftp,icmp,smtp,base64,md5,sha1。原创 2024-03-17 21:59:17 · 2083 阅读 · 0 评论 -
C/C++嵌入式开发环境搭建,Qt交叉编译,cmake交叉编译,clion/vscode远程开发
交叉编译gdb调试,交叉编译 gdbserver,gdb远程调试,gdb调试core文件交叉编译是在一个平台上编译生成另一个平台上的可执行代码,当我们开发目标是一个嵌入式设备时,便需要在PC机上编译出能在该嵌入式设备上运行的可执行文件,这里编译主机与目标运行主机不是同一个设备,该过程就称为交叉编译;编译是指一个源代码文件,如C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)等步骤才能变成可执行文件,整个过程统称为编译。原创 2024-03-03 21:12:56 · 1387 阅读 · 0 评论 -
C语言奇技Y巧之sscanf函数用法详解
sscanf,C语言中的函数,读取格式化的字符串中的数据。sscanf读取字符串、整型、浮点数,sscanf 使用正则表达式,同时读取多个字符串和整数,sscanf 返回-1,sscanf 解析失败处理,sscanf 缺点。原创 2024-02-20 22:19:47 · 1185 阅读 · 0 评论 -
可基于udp的可靠传输协议kcp介绍,C++测试kcp示例
KCP是国人开发的开源项目,作者:林伟 (skywind3000)(这个是真大牛)。开源地址:https://github.com/skywind3000/kcpKCP是快速可靠传输协议,纯算法实现,KCP无任何系统调用,不负责底层协议收发,底层可以使用UDP或其他自定义协议进行收发。原创 2024-02-04 21:19:09 · 1979 阅读 · 0 评论 -
C++流媒体服务器 ZLMediaKit框架ZLToolKit源码解读
ZLMediaKit是国人开发的开源C++流媒体服务器,同SRS一样是主流的流媒体服务器。基于C++11,大量使用C++11新特性,如智能指针、lambda表达式等,安全性高,是高度运用C++特性的框架。主要分为Thread、Poller、Network、Util四大部分。 EventPollerPool事件循环线程池。原创 2024-01-07 21:30:27 · 2435 阅读 · 0 评论 -
C++高性能服务器框架muduo,与配套书籍《Linux多线程服务端编程》解读
muduo开源代码解析,多线程服务器模型,《Linux多线程服务端编程》阅读笔记,来自作者陈硕。原创 2023-12-10 21:00:23 · 641 阅读 · 0 评论 -
C++基类和派生类的内存分配,多态的实现
C++基类和派生类的内存分配分析,虚函数表占用内存分析,基类和派生类的成员归属详解,多态的实现,C++源码示例。原创 2023-10-24 22:31:00 · 459 阅读 · 0 评论 -
C++11新特性介绍,源码测试
C++11关键字:auto,decltype,nullptr,final,override ,default,delete,C++11新特性:右值引用和std::move,Lambda表达式,for循环(基于范围的循环),统一初始化initializer_list,静态断言static_assert,函数返回类型后置,强类型枚举(枚举类),前置枚举声明, 内联命名空间(Inline namespaces),变参宏(Variadic macros)。原创 2023-10-18 21:57:18 · 246 阅读 · 0 评论 -
C++使用cmake创建项目
cmake支持linux、windows等跨平台使用。cmake下载安装,cmake加载头文件,源文件,cmake加载lib动态库和静态库,cmake预定义宏等。cmake设置C++编译选项,添加库依赖。原创 2023-09-23 16:39:14 · 417 阅读 · 0 评论 -
C++标准库STL容器详解
C++标准模板库STL容器,reserve和resize,插入/删除/查找时间复杂度,容器接口,红黑树/哈希表数据结构图解,容器都是类模板,实例化后是容器类。顺序容器vector、deque、list,关联容器set、multiset、map、multimap、unordered_set、unordered_multiset、unordered_map、std::unordered_multimap,容器适配器stack、queue、priority_queue。原创 2023-08-29 22:03:22 · 853 阅读 · 0 评论 -
C++/windows开发备忘录
windows使用cmd命令行g++编译C++源文件,常用工具Everything、BeyondCompare、Wireshark、SourceTree、Qt下载,几个国内的镜像、dumpbin、depends、ProcessExplorer、VLD内存泄漏检测,Windows中使用命令行杀进程。QT5.15.2+VS2019环境搭建。由于找不到MSVCR100.dll,无法继续执行代码;应用程序无法正常启动0xc000007b原创 2022-11-02 22:22:37 · 5442 阅读 · 1 评论 -
C++解决TCP粘包
C++实现TCP客户端和TCP服务端,C++实现TCP数据收发,数据组包,解决TCP粘包问题。原创 2023-08-06 21:55:24 · 1123 阅读 · 0 评论 -
C++音视频流媒体服务器SRS源码框架解读,配置文件(SrsConfig)的使用
C++框架,SRS封装了SrsConfig类,配置指令类(SrsConfDirective),缓存区(SrsConfigBuffer),定义了使用方便且功能强大的配置文件,部分参考了nginx的配置文件,形式上类似与JSON,一个配置项里面可以包含子配置项,套娃的形式和JSON数组很像;可重新加载配置,重载配置时通过回调函数的形式执行其他模块的重载。原创 2023-08-05 13:51:19 · 1058 阅读 · 0 评论 -
C++音视频流媒体服务器SRS源码框架解读,信号量(SrsSignalManager)的使用
C++语言,SRS封装了SrsSignalManager类,注册信号量回调函数,使用linux无名管道,接收到信号量时写入管道,在协程里轮询读取管道里的信号,并作相关处理。信号量的使用提供了用户进程(命令行即可)与正在运行的SRS程序通信的方式,SRS使用信号量实现的功能:强制退出程序、优雅地退出程序(执行一系列析构,停止监听等)、重新加载配置文件、日志文件切割等。原创 2023-08-01 07:36:09 · 514 阅读 · 0 评论 -
C++音视频流媒体服务器SRS源码框架解读,日志记录SrsFileLog的使用
SRS封装了日志类SrsFileLog(输出到文件或控制台)、SrsConsoleLog(输出到控制台),具备常用的日志功能。SrsThreadMutex类,对pthread_mutex_t 进行封装功能包括:日期,时间,日志级别,格式化参数列表,pid,上下文ID(方便定位问题,每个协程有个唯一的上下文ID),可输出到控制台或文件等;提供了使用方便的宏接口。原创 2023-07-29 22:16:35 · 574 阅读 · 0 评论 -
C++音视频流媒体服务器SRS源码框架解读,协程库state-threads的使用
C语言协程库state-threads(简称ST库),SRS对state-threads库进行了2次开发,SrsAutoFree自动释放指针,SrsContextId上下文ID的使用,测试源码。原创 2023-07-28 21:20:25 · 1023 阅读 · 0 评论 -
C++音视频流媒体服务器SRS源码框架解读,错误类(SrsCplxError)的使用
SRS流媒体服务器定义了一个功能强大的错误类(SrsCplxError),可自定义错误码、错误描述、详细信息、摘要,错误发生的文件名、函数名、行号;可建立连接多个错误类的单链表,形成一个错误栈;为上述功能提供了接口宏。此外,还自定义了断言宏(srs_assert),在crash时使用backtrace打印回溯调用栈,方便排查bug。原创 2023-07-26 22:59:58 · 368 阅读 · 0 评论 -
std::hash和unordered_map用法,C++自定义哈希表
std::hash是实现了仿函数的类模板,根据传入不同数据类型T,获得其哈希值。返回值类型:size_t。对于C/C++内置数据类型,已经实现了其哈希函数,自定义数据类型需要定义其哈希值的求值方式。C++中的哈希表是通过unordered_map实现的,它是一种关联容器,可以将键值对存储在其中。它的特点是快速查找,插入和删除,时间复杂度为O(1)。原创 2023-07-21 22:07:33 · 1465 阅读 · 0 评论 -
linux内核TCP/IP源码浅析
netif_rx,ip_local_deliver,ip_local_deliver_finish,tcp_v4_rcv,tcp_v4_do_rcv,tcp_rcv_established,tcp_recvmsg,tcp_v4_rcv,tcp_v4_do_rcv,tcp_rcv_established,tcp_data_queue,sk_data_ready。recvfrom, SYSCALL_DEFINE2,__sys_recvfrom,sock_recvmsg,sock_recvmsg_nosec,in原创 2023-07-04 22:28:49 · 2330 阅读 · 0 评论 -
Floyd算法图解,C++实现Floyd算法
C++实现Floyd算法:Floyd算法是一种多源最短路径算法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。时间复杂度:O(n^3),空间复杂度:O(n^2)。初始化权重矩阵weitMatrix[][]和路径矩阵pathMatrix[][],遍历所有点。原创 2023-06-17 23:28:06 · 1309 阅读 · 0 评论 -
C++实现udp分包和组包
C++实现udp分包,C++实现udp组包,UDP是不会出现粘包的,但是会丢包,TCP不丢包,但TCP会粘包。udp的MTU,udp分包和组包策略。原创 2023-05-17 21:49:48 · 3627 阅读 · 1 评论 -
Dijkstra算法图解,C++实现Dijkstra算法
Dijkstra算法图解,C++实现Dijkstra算法。添加顶点,删除顶点,添加边,删除边。Dijkstra算法计算是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到起点距离最近且未访问过的顶点的邻接节点,直到扩展到所有终点为止。原创 2023-05-13 22:40:14 · 4483 阅读 · 0 评论 -
redis服务搭建,C++实现redis客户端,redis远程可视化工具
redis简介、redis服务搭建、 redis常用命令、C++实现redis客户端、redis远程可视化工具:Another Redis DeskTop Manager原创 2023-05-05 21:27:58 · 797 阅读 · 0 评论 -
OSPF路由协议解释
OSPF(Open Shortest Path First),LSA(Link-State Advertisement),链路状态通告,AS(autonomous system),自治系统,ASE路由,自治系统外部的路由。STUB,NSSA("not-so-stubby" area),xorp,frr原创 2023-04-25 21:52:19 · 1461 阅读 · 0 评论 -
C++互斥锁std::mutex
std::mutex 是C++11 中最基本的互斥量,lock(),unlock(),try_lock(),std::lock_guard, std::unique_lock ,std::mutex实测代码原创 2023-04-02 20:35:18 · 1401 阅读 · 0 评论 -
linux读写锁pthread_rwlock_t
pthread_rwlock_t g_rwlock; // 定义一把读写锁pthread_rwlock_init(&g_rwlock, NULL); // 初始化读写锁pthread_rwlock_rdlock(&g_rwlock); // 请求读锁pthread_rwlock_wrlock(&g_rwlock); // 请求写锁pthread_rwlock_unlock(&g_rwlock); // 解锁pthread_rwlock_destroy(&g_rwlock);// 销毁读写锁,设置读写优先级原创 2023-03-26 22:27:31 · 837 阅读 · 0 评论 -
dpdk原理,dpdk编译与环境搭建,dpdk简单示例
绑定网卡,大页,mempool,PCI,NIC,自旋锁,mmap,ring,Mbuf原创 2023-02-07 22:30:10 · 1522 阅读 · 0 评论 -
C++实现回调函数的几种方式
C++虚函数特性实现回调函数,C++结构体指针实现回调函数, C++11新特性td::tr1::function和std::tr1::bind实现回调函数,C++联合体union实现回调函数,线程回调函数。原创 2023-01-14 11:18:55 · 4748 阅读 · 0 评论 -
C++信号量实现线程间同步,windows使用SetEvent,linux使用sem_t,QT测试
windows使用CreateEvent、SetEvent、ResetEvent、WaitForSingleObject,linux使用sem_init、sem_wait、sem_trywait、sem_post、sem_destroy,C++信号量实现线程间同步,windows使用SetEvent,linux使用sem_t,QT测试原创 2023-01-08 20:16:24 · 971 阅读 · 0 评论 -
C/C++socket网络编程
socket多进程编程,tcp和udp流程图,socket函数, bind函数,listen函数,accept函数,connect函数,recv、recvfrom、read函数,send、write、sendto、sendmsg函数,close、shutdown函数,htonl、ntohl、htons、ntohs本地主机和网络字节序转换,inet_addr、inet_aton、inet_ntop,IP地址转换,setsockopt,fcntl,getpeername与getsockname原创 2022-12-17 21:51:04 · 7490 阅读 · 6 评论 -
linux网络编程epoll详解
epoll_create,epoll_ctl,epoll_wait,epoll的触发模式,边沿触发:edge-triggered (EPOLLET), 水平触发:level-triggered (EPOLLLT),epoll原理解析,中断和阻塞,socket接收网络数据,epoll的设计思路,epoll的工作流程,就绪列表Rdlist,eventpoll,索引结构RBR。原创 2022-12-04 21:41:49 · 3982 阅读 · 0 评论 -
C++智能指针shared_ptr用法
C++,shared_ptr对象管理指针,shared_ptr提供的接口, shared_ptr初始化,构造函数初始化,std::make_shared 初始化,reset初始化,shared_ptr管理指针的构造和析构,shared_ptr获取原始指针,shared_ptr的线程安全,shared_ptr应用之enable_shared_from_this.原创 2022-12-03 20:06:53 · 8377 阅读 · 1 评论 -
C++ std::tr1::function和std::tr1::bind模板类介绍,qt测试
C++11以后在标准库里引入了std::function模板类,这个模板概括了函数指针的概念。函数指针只能指向一个函数,而std::function函数包装器模板能包装任何类型的可调用实体,如普通函数、函数对象、lambda表达式、静态成员函数等。std::bind是对std::function功能的扩展,可指向类的非静态成员函数,使用参数占位符等。使用qt测试代码。原创 2022-12-03 11:40:37 · 1099 阅读 · 0 评论 -
windbg调试分析dump工具,使用windbg分析Qt崩溃原因
在非开发环境,windbg工具可以对.exe可执行文件进行调试,也可以分析dump文件,是release版本运行模式解决bug的神器,分析崩溃crash,windbg下载和安装,windbg调试exe可执行文件,windbg分析dump文件,生成.pdb符号文件,windbg常用命令.sympath srv*,.reload,x testDump!*,bm ,bl,g,k,dv /t,~,~0s,~*kv,qd,!analyze -v等。原创 2022-11-05 17:33:02 · 2303 阅读 · 1 评论 -
C语言函数大全(下)-MOPQRSTUVW
C语言函数大全,包含功能描述,函数声明,程序demo,本章为下部,首字母MOPQRSTUVW的函数。原创 2022-10-24 22:13:03 · 724 阅读 · 0 评论 -
C/C++常用方法
C++表示二进制,八进制,十进制和十六进制,负数的二进制表示法,C++位运算,& (按位与)、| (按位或)、^ (按位异或)、~ (按位取反)、>> (按位右移)、1字节对齐,main函数传参和解析,va_list,fork多进程,sleep,指针一维数组和二维数组的分配和释放,打印进程ID和线程ID,C语言tcp客户端和服务端。原创 2022-10-23 20:05:55 · 1000 阅读 · 0 评论 -
C语言函数大全(上)-ABCDEFGHIKL
C语言函数大全,包含功能描述,函数声明,程序demo,本章为上部,首字母ABCDEFGHIKL的函数。原创 2022-10-23 19:36:37 · 868 阅读 · 0 评论 -
C语言实现tcp客户端和tcp服务端,Qt调用测试
C语音实现tcp客户端和tcp服务端,并用Qt调用测试,支持windows和linux跨平台。原创 2022-07-16 21:27:01 · 1864 阅读 · 0 评论 -
C语言实现定时器,Qt测试定时器
C语言实现定时器demo,支持windows和Linux跨平台使用;windows使用子线程pthread_cond_timedwait条件变量实现;linux使用timerfd_create配合epoll_wait实现,timerfd是Linux为用户程序提供的一个定时器接口。这个接口基于文件描述符,通过文件描述符的可读事件进行超时通知,所以能够被用于select/poll的应用场景。CSTimer.hCSTimer.c使用QT测试:打印输出......原创 2022-06-26 22:20:46 · 2412 阅读 · 0 评论 -
Qt复现pure virtual method called报错,与解决办法
程序崩溃,报错:pure virtual method called,terminate called without an active exception,大意为调用了纯虚函数,程序中止。纯虚函数是没有函数体的虚函数。包含纯虚函数的类就叫抽象类。C++不允许抽象类实例化对象,正常情况下不会执行抽象类的纯虚函数。虚函数通过函数表实现多态,在一些特殊情况下(不安全的代码写法)会发生纯虚函数的调用。通常情况下在构造和析构的时候容易报"pure virtual method called"错误,这与基类和派生原创 2022-06-15 21:55:57 · 2992 阅读 · 0 评论