- 博客(311)
- 收藏
- 关注
原创 libpcap、Winpcap、Npcap三者关联与区别
Libpcap主要服务于类Unix系统,WinPcap将其功能扩展到了Windows环境,而Npcap则在此基础上进一步增强了功能、性能及安全性,成为目前Windows平台上推荐使用的库。
2025-01-10 13:29:49 222
原创 【C/C++】同步锁的选择(基于性能场景)
仅需要在单个进程中进行同步,且锁的竞争不是很激烈,则建议 CriticalSection需要支持多个读者或跨进程同步,则需要考SRW Locks 或者 Mutex锁的竞争特别激烈,则考虑无锁机制或者利用Interlocked进行设计自定义同步就机制。
2025-01-09 13:52:07 82
原创 【C/C++】windows平台同步锁机制种类
CriticalSection:Mutex(互斥量):Semaphore(信号量):Slim Reader/Writer (SRW) Locks:Interlocked Functions:Condition Variables:Event Objects:
2025-01-09 13:44:45 460
原创 【计算机网络】wireshark 导出C语言二进制数组数据
在我们平时的开发过程中,可能从 wireshark 面板数据包->数据包右击中-> 复制-> …as Raw Binary 可能会出现失败。OK , 设置完成,导出至磁盘,磁盘上就会有一个二进制文件,还是以C语言char数组的形式存放。所以,现在找到了其他的方法,留个笔记。
2025-01-08 09:21:15 78
原创 【C/C++】Protobuf与nlohmann/json的比较
特性Protobufnlohmann/json数据格式二进制格式,紧凑,不可读文本格式,可读性强性能序列化/反序列化速度快,内存占用小序列化/反序列化速度慢,内存占用大跨语言支持多语言支持,代码生成广泛的语言支持,无需代码生成学习曲线学习成本高,文档丰富学习成本低,API简洁易用扩展性和灵活性强类型系统,字段编号,向后兼容性好弱类型系统,动态性高,灵活性好生态系统成熟的生态系统,官方支持,gRPC等轻量级库,社区活跃,单头文件集成
2025-01-06 14:20:21 292
原创 【C/C++】nlohmann::json从文件读取json,并进行解析打印,实例DEMO
使用 json::parse 函数将JSON格式的字符串解析为 nlohmann::json 对象。这个函数支持多种输入源,包括字符串、文件流等。
2025-01-03 12:01:36 243
原创 【C/C++】C语言打印十六进制数据
2、使用PRIx64 和 PRIu64 宏(需要头文件 inttypes.h,支持跨平台)1、使用 "%llu"格式说明符。
2025-01-02 13:51:59 253
原创 【C/C++】VS2022生成DLL时,输出的导入库名称的修改方法
我们若是开发一个 xx.dll ,则一种对外符号方式是通过导入库的形式,即生成目录下会存在一个 xx.lib ,其他项目若是想使用 xx.dll ,则需要在其项目链接器中添加 xx.lib , 否则会出现符号找不到的情况。当然,大家也可以直接使用函数地址偏移。
2024-12-27 14:32:03 223
原创 【C/C++】C语言编程规范
● 使用表达式定义常量时,必须用括号括起来,避免在使用时由于操作符优先级导致的异常结果;同样,对于函数形式的宏,每个参数在函数体中都要用括号括起来。● 使用GOTO时,标签名需要有实际意义,例如说明后续代码的意图,说明走到该分支的原因等。● 对于#if、#ifdef、#elif等预处理指令,由于关键字后就是判断条件,不需要添加注释。● 如果函数形式的宏包含未使用的参数,请使用static inline函数,不要使用宏。● 如果函数中使用的临时变量超过10个,它的功能可能过于复杂了,需要考虑如何拆分。
2024-12-26 11:23:19 966
原创 【C/C++】位图使用的意义
内存管理:操作系统和内存管理器可以使用位图来跟踪内存块的分配情况,每个位表示一个内存块是否被占用。文件系统:文件系统可以使用位图来管理磁盘块的分配,每个位表示一个磁盘块是否可用。进程调度:操作系统可以使用位图来管理进程的优先级或资源分配,每个位表示一个进程的状态或资源是否可用。图像处理:位图可以用于表示二值图像,其中每个位表示一个像素的颜色(0 表示黑色,1 表示白色)。网络协议:网络协议使用位图来表示选项或标志,例如 TCP 头部中的控制位。
2024-12-25 19:40:44 80
原创 【C/C++】推荐一个性能优良的错误码打印机制,已实测!
但是,基于灵活可扩展思想,我们的错误码是与日俱增的,所以,如何能不写很多switch-case语句,是我们的一个思考点。基于上1篇 switch与for的性能比较文章,若我们在开发一个较大型的系统架构,则错误码机制是必不可少的。下面是在下拙见,抛砖引玉,希望可以给大家一些帮助。大家可以试着用一用!希望可以帮助到各位。
2024-12-23 14:06:52 351
原创 【C/C++】关于switch与for循环比对的性能优劣讨论
switch 语句:在处理有限且连续的整数状态时,switch 语句通常具有更好的性能,尤其是当编译器生成跳转表时。if-else 语句:在处理非连续或动态的状态时,if-else 语句可能是更好的选择,尤其是在状态数量较多且不固定的情况下。当 case 标签是连续的整数时,switch 的性能非常好,因为编译器可以生成跳转表,使得查找时间接近常数时间 O(1)。如果 for 循环内部包含复杂的逻辑(如大量的条件判断),可能会导致性能下降,尤其是在没有编译器优化的情况下。测试 switch 语句。
2024-12-23 11:55:15 557
原创 【操作系统】为什么需要架构裁剪?
为什么需要架构裁剪?原因减小核心大小提高架构初始化速度降低内存占用提高系统性能移除不需要的功能,增加安全性裁剪方法初始化配置设置功能模块化移除不需要的驱动底层一般裁剪对象(以操作系统为例)文件系统的支持网络协议栈设备驱动程序调试和追踪程序电源管理功能虚拟化功能
2024-12-18 19:58:58 230
原创 【C/C++】头文件中应该使用#define作为保护,还是使用#pragma once进行保护?
一般,可以在自写demo或者验证代码时,可以使用#pragma once,但是,集成时,要优化调整。#pragma once 无法解决一个场景问题:相同的一份头文件,在仓库中存在多份,则无法保护。为什么不适用#pragma once?#define 形式的保护,则可以。
2024-12-16 14:39:14 354
原创 【C/C++】关于C/C++中指针类型“*“跟随变量名或者类型
声明或定义指针变量或者返回指针类型函数时,“*” 靠左靠右都可以,但是不要两边都有或者都没有空格。选择"*"跟随类型风格时,避免一行同时声明带指针的多个变量。// 不可以: 很容易将 b 误理解成指针。// 不可以: 两边都没空格。// 不可以: 两边都有空格。选择"*"跟随变量风格时,可能会存在无法紧跟的情况。无法跟随时就不跟随,不要破坏风格一致性。
2024-12-16 14:24:28 226
原创 【消息中间件】什么是MQTT?优势是什么?
一种针对移动终端设备的基于TCP/IP的发布订阅协议,可以连接大量远程边缘设备(如传感器、控制设备)。特点是,可以保持长连接,具有一定的实时性。2、“至少1次”:发生消息重复,不关注。即,出现消息丢失后,发送者会进行发送多次,直至觉察到接收者接收到了,重复接收几个相同的消息,也不care。1、”至多1次”:发生消息丢失,不关注。即,发送者仅发送1次,接收者能不能收到,不care。3、“只有1次”:确保消息仅仅到达1次。使用发布订阅模式,提供一对多的消息发布,解除应用程序的耦合。发布者、订阅者、代理中心。
2024-12-16 09:36:39 287
原创 【IO】关于DMA、零拷贝技术笔记
DMA(Direct Memory Access,直接内存访问)控制器是一种硬件组件,它允许外部设备直接与系统内存进行数据传输,而无需中央处理器(CPU)的直接干预。DMA 控制器的设计和实现原理旨在提高数据传输的效率和系统的整体性能。零拷贝是一种思想,目标是降低内存拷贝次数。DMA技术仅仅是减少了CPU上下文切换、调用负担。上层系统减少了一次拷贝,但是这次拷贝是交给了DMA控制器进行执行,从整体(DMA+原系统)上来说,并没有减少拷贝次数。
2024-11-28 15:36:37 798
原创 【计算机网络】C/C++实现解析Wireshark离线数据包,附源码
是 libpcap 库中的一个重要函数,用于打开一个包含已捕获数据包的文件,以便进行离线分析。这个函数在网络安全分析、协议分析等领域有着广泛的应用。接下来,函数会读取文件头信息,以验证文件格式是否符合 libpcap 的要求。文件头包含了一些重要的元数据,如魔数、版本号等。读取文件头后,函数会进行一系列校验,确保文件格式正确。如果文件不存在或无法打开,函数会返回。指针,以便后续调用其他 libpcap 函数进行数据包处理。如果文件头校验通过,函数会初始化一个。函数打开一个捕获文件并读取数据包。
2024-11-26 12:16:11 669
原创 【cmake】cmake常用变量
2、PROJECT_SOURCE_DIR: 工程顶级目录,即顶层CMakeLists.txt源码所在路径。5、EXECUTABLE_OUTPUT_PATH: 设置可执行文件的输出路径。8、CMAKE_CXX_COMPILTER: 设置C++语言的交叉编译工具链。3、PROJECT_BINARY_DIR: 生成CMake缓存文件的目录。6、LIBRARY_OUTPUT_PATH: 设置库文件的输出路径。7、CMAKE_C_COMPILTER: 设置C语言交叉编译工具链。
2024-11-21 09:25:18 136
原创 【cmake】关于cmake构建系统Ninja
p 选项表示“parents”,即递归地创建目录。如果上级目录不存在,mkdir -p 会自动创建所有必要的上级目录。如果 path 或 to 目录不存在,mkdir -p 会自动创建它们。
2024-11-19 11:29:51 518
原创 【Linux】mkdir -p 命令
p 选项表示“parents”,即递归地创建目录。如果上级目录不存在,mkdir -p 会自动创建所有必要的上级目录。如果 path 或 to 目录不存在,mkdir -p 会自动创建它们。
2024-11-19 09:11:00 304
原创 【cmake】cmake版本不兼容一般会有什么问题?
在平时的项目中,需要使用cmake,在使用不同的版本的cmake进行构建,会出现以下一些问题,所以,建议大家进行使用 cmake_minimum_required 来指定cmake版本。
2024-11-19 08:52:52 473
原创 【计算机网络】水平触发与边缘触发有什么优缺点呢?
我们在平时的开发过程中,经常会遇到水平触发与边缘触发这两种IO机制的选择,常常会比较难选择。定义:优点:减少通知次数:高效性:适合高性能场景:缺点:需要完全处理事件:复杂性增加:调试困难:定义:优点:简单易用:可靠性高:易于调试:缺点:可能产生大量通知:不适合高性能场景:资源消耗:边缘触发:水平触发:
2024-11-18 17:24:46 905
原创 【C/C++】总结要使用extern “C“的场景,以及何时使用
导出和导入 DLL 函数:如果使用 C 链接方式,需要使用 extern “C”。包含 C 库的头文件:通常需要在头文件中使用 extern “C”。函数指针:指向 C 函数的函数指针需要使用 extern “C”。从 C++ 调用 C 函数:必须使用 extern “C”。从 C 调用 C++ 函数:必须使用 extern “C”。
2024-11-12 15:11:11 215
原创 【计算机网络】设备网卡NIC的工作内容有哪些呢?
我们平时上网,都需要经过设备网卡的处理,网络接口卡(Network Interface Card,简称 NIC)是计算机与网络之间的物理连接设备,负责处理网络数据的发送和接收。NIC 的功能涵盖了从物理层到数据链路层的多个方面。
2024-11-12 10:58:42 1129
原创 【计算机网络】网卡NIC的工作内容包括哪些呢?
我们平时上网会接触到网卡,网络接口卡(Network Interface Card,简称 NIC)是计算机与网络之间的物理连接设备,负责处理网络数据的发送和接收。NIC 的功能涵盖了从物理层到数据链路层的多个方面。
2024-11-12 10:51:31 1050
原创 【计算机网络】设备如何监听 ARP 请求广播
在网络通信中,**ARP(地址解析协议)**用于将网络层的 IP 地址解析为链路层的物理地址(MAC 地址)。当一个设备需要发送 IP 数据包时,它需要知道目标设备的 MAC 地址,这时它会发送一个。ARP 请求通常是一个广播帧,所有在同一局域网内的设备都会接收到这个请求。
2024-11-12 10:45:14 919
原创 【C/C++】在 Windows 中,LoadLibrary 加载动态链接库(DLL),多次调用加载同一个DLL,会出现多个DLL被加载吗?
在我们平时开发过程中,会遇到多次调用加载同一个DLL的场景,这样会不会多次加载,有冗余呢?在 Windows 中,函数用于加载动态链接库(DLL)。经过代码测试,答案是。不会重复加载同一个 DLL 多次,而是会返回已经加载的 DLL 的句柄。
2024-11-11 14:11:35 631
原创 【ZeroMQ 】ZeroMQ中inproc优势有哪些?与其它传输协议有哪些不同?
inproc是 ZeroMQ 提供的一种传输协议,用于在之间进行高效的通信。与其他传输协议(如tcpipc等)不同,inproc专门针对线程间通信进行了优化,具有极低的延迟和开销。以下是inproc。
2024-11-08 16:58:15 495
原创 【C/C++】CreateThread 与 _beginthreadex, 应该使用哪一个?为什么?
兼容性:如果你的应用程序大量使用 CRT 函数,建议使用来创建线程,以确保 CRT 的正确初始化和线程安全。性能:对于不涉及 CRT 函数的简单线程,可能稍微快一些,因为它绕过了 CRT 相关的初始化。推荐实践:为了代码的安全性和可维护性,推荐使用或 C++11 及以后的,它们提供了更好的线程管理和 CRT 支持。
2024-11-08 14:13:06 348
有道词典离线翻译长篇文章资源包
2024-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人