- 博客(116)
- 资源 (3)
- 问答 (2)
- 收藏
- 关注
原创 c++ std::string_view
创建string_view时候不存在任何动态分配内存,不存在字符串的遍历:编译期确定字符串长度、对象大小,这种并不是什么奇技淫巧,因为早在运算符重载的时候,就有一个size_t参数,这个就是编译器传入的对象大小,而std::string_view,则是在编译期间传入字符串的指针和长度,构建对象。但是,std::string和std::string_view这两个类同时提供了只带字符串指针和两个版本的构造函数,默认的情况下,会调用构造,但是会调用带长度的版本,
2025-03-27 19:27:04
486
原创 const static constexpr
static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。在C++中,static静态成员变量不能在类的内部初始化。在类的内部只是声明,定义必须在类定义体的外部,通常在类的实现文件中初始化,被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来;
2025-03-27 18:48:13
875
原创 Windows 安装libcurl库
需要先安装nasm 和 perlCompiler Platform 根据自己的环境进行选择即可VSpath :如果你的vs不是默认的C盘路径,就要指定你的VS安装路径,像我的就是D:\Program Files\Microsoft Visual Studio\2022\Enterprise"之后在vs中构建即可 需要重新添加包含目录等。
2025-03-27 18:46:21
491
原创 GetCurrentTime
根据你的项目需求和编译器支持情况,选择最适合的方案。Boost 是一个功能丰富的 C++ 库,提供了时间处理工具。是一个功能强大的格式化库,支持 C++11 及以上版本。• 功能强大,支持 C++11 及以上版本。• 代码简洁,类似于 C++20 的。• 类型安全,无需手动管理缓冲区。,提供了更现代化的时间处理方式。• 使用标准库函数,代码更简洁。• 功能强大,支持多种时间操作。,提供了更简洁的格式化方式。• 需要 C++20 支持。• 简单直接,兼容性好。• 支持多种格式化方式。• 代码简洁,现代化。
2025-03-15 23:30:21
589
原创 std::forward的使用技巧
是 C++11 中实现完美转发(Perfect Forwarding)的核心工具,其核心作用是在函数模板中保持参数的原始值类别(左值或右值),确保参数在多层传递过程中不会丢失引用属性。
2025-03-15 20:42:16
756
转载 使用核心转储文件 + gdb 定位程序BUG
我们遇到了核心转储,这意味着计算机输出了核心文件.(核心文件是一个ELF文件,包含程序崩溃时的完整状态信息。我们输入一个很大的index来触发这个code dump。如果你当前目录没有生成。这样我们就得到了core文件。接下来使用gdb进行加载调试。其明确的给出了详细的错误信息。以下是一个简单的演示代码。
2025-03-14 14:48:59
13
原创 将DeepSeek接入你的桌面,QT&C++的炫酷桌面雏形
基于QT和C++开发的操作系统桌面DEMO雏形,后期我们会逐渐完善桌面基本功能和加入AI功能.将DeepSeek接入你的桌面,QT&C++的炫酷桌面雏形。更多强大的功能正在开发中…
2025-03-03 22:06:44
81
原创 linux 开发小记 perf strace
strace 能帮助你查看程序的具体行为,尤其是在调试时,有助于发现无法预见的错误或不明确的系统交互。可以追踪与操作系统直接交互的部分,对于性能瓶颈或资源泄漏也能提供很多线索。由于 strace 捕获了所有的系统调用,所以可能对程序的执行产生一定的性能影响。尤其在大量系统调用的程序中,性能影响较大。对于多线程程序,strace 可能无法完全准确地显示线程间的操作,尤其是涉及同步机制的系统调用。
2025-01-22 20:52:00
673
原创 Clang ThreadSafetyAnalysis Clang 线程安全分析
Clang 线程安全分析是一个 C++ 语言扩展,它对 代码中的潜在争用条件。分析是完全静态的(即编译时没有运行时开销分析仍然是正在积极开发中,但它已经足够成熟,可以部署在工业环境。它由 Google 与 CERT/SEI,并在 Google 的内部代码库中广泛使用。线程安全分析的工作方式与多线程的类型系统非常相似 程序。除了声明数据类型(例如 int、flout、 等),程序员可以(可选地)声明对该数据的访问方式 在多线程环境中进行控制。
2024-12-06 16:05:51
761
原创 Macro function
TAILQ_INITTAILQ_INIT宏是一个用于初始化尾队列头部的工具,它通过将tqh_first设置为NULL并将tqh_last设置为指向tqh_first的地址,确保队列可以从空状态正确地过渡到非空状态。这个设计使用了二级指针的概念,使得尾部插入操作更为高效和直接。这种结构广泛应用于需要动态管理链表的系统编程场景中。这种结构确保了宏在使用时会像一个普通的语句一样执行,而不会引起语法错误。例如,用户可以安全地在if语句中使用这个宏,而不会因为缺少大括号导致错误tqh_firstNULL。
2024-11-18 20:25:29
797
原创 Macro definition
这个函数告诉event_config在生成多线程event_base的时候,应该试图使用给定数目的CPU。这个函数的工作与event_base_new()类似,它将分配的event_base设置成当前的。选择各种方法时,函数会选择OS支持的最快方法。本文描述的函数有一些用于操作当前event_base的变体,这些函数与新版本函数的行为类似,只是它们没有event_base参数。这个函数在new_event_base被调用,传入的参数是event_config,根据cfg的内容来配置event_base。
2024-11-18 20:24:38
595
原创 event_base
这个函数告诉event_config在生成多线程event_base的时候,应该试图使用给定数目的CPU。这个函数的工作与event_base_new()类似,它将分配的event_base设置成当前的。选择各种方法时,函数会选择OS支持的最快方法。本文描述的函数有一些用于操作当前event_base的变体,这些函数与新版本函数的行为类似,只是它们没有event_base参数。这个函数在new_event_base被调用,传入的参数是event_config,根据cfg的内容来配置event_base。
2024-11-18 20:24:06
931
原创 event_base
这个函数告诉event_config在生成多线程event_base的时候,应该试图使用给定数目的CPU。这个函数的工作与event_base_new()类似,它将分配的event_base设置成当前的。选择各种方法时,函数会选择OS支持的最快方法。本文描述的函数有一些用于操作当前event_base的变体,这些函数与新版本函数的行为类似,只是它们没有event_base参数。这个函数在new_event_base被调用,传入的参数是event_config,根据cfg的内容来配置event_base。
2024-11-18 20:23:25
1440
原创 Macro definition
比如说,可以有两个事件因为某个给定的fd已经就绪,可以读取而成为激活的。默认情况下,每当未决事件成为激活的(因为fd已经准备好读取或者写入,或者因为超时),事件将在其回调被执行前成为非未决的。然而,如果设置了EV_PERSIST标志,事件就是持久的。标志是被忽略的:可以在添加事件的时候设置超时,也可以不设置。表示指定的文件描述符已经就绪,可以读取的时候,事件将成为激活的。表示指定的文件描述符已经就绪,可以写入的时候,事件将成为激活的。每次执行事件回调的时候,持久事件的超时值会被复位。如果支持,则直接使用。
2024-11-18 20:22:16
1015
原创 Bufferevent and evbuffer
每个bufferevent都有一个输入缓冲区和一个输出缓冲区,它们的类型都是“struct evbuffer”。有数据要写入到bufferevent时,添加数据到输出缓冲区;bufferevent中有数据供读取的时候,从输入缓冲区抽取(drain)数据。evbuffer接口支持很多种操作,后面的章节将讨论这些操作。
2024-11-18 20:21:33
897
原创 Bufferevent Advanced Topics
本章描述bufferevent的一些对通常使用不必要的高级特征。如果只想学习如何使用bufferevent,可以跳过这一章,直接阅读下一章。
2024-11-18 20:20:54
1058
原创 Bufferevent and SSL
bufferevent可以使用OpenSSL库实现SSL/TLS安全传输层。因为很多应用不需要或者不想链接OpenSSL,这部分功能在单独的libevent_openssl库中实现。未来版本的libevent可能会添加其他SSL/TLS库,如NSS或者GnuTLS,但是当前只有OpenSSL。OpenSSL功能在2.0.3-alpha版本引入,然而直到2.0.5-beta和2.0.6-rc版本才能良好工作。这一节不包含对OpenSSL、SSL/TLS或者密码学的概述。这一节描述的函数都在中声明。
2024-11-18 20:20:15
638
原创 Build event
eventlibevent的基本操作单元是事件。每个事件代表一组条件的集合,这些条件包括:文件描述符已经就绪,可以读取或者写入文件描述符变为就绪状态,可以读取或者写入(仅对于边沿触发IO)超时事件发生某信号用户触发事件所有事件具有相似的生命周期。调用libevent函数设置事件并且关联到event_base之后,事件进入“”状态。此时可以将事件添加到event_base中,这使之进入“”状态。
2024-11-18 20:19:24
593
原创 evbuffer
这两个函数的功能很简明:evbuffer_new()分配和返回一个新的空evbuffer;而evbuffer_free()释放evbuffer和其内容。
2024-11-18 20:14:09
1002
原创 DNS with libevent
libevent提供了少量用于解析DNS名字的API,以及用于实现简单DNS服务器的机制。我们从用于名字查询的高层机制开始介绍,然后介绍底层机制和服务器机制。
2024-11-18 20:13:19
950
原创 evconnlistener
两个evconnlistener_new*()函数都分配和返回一个新的连接监听器对象。连接监听器使用event_base来得知什么时候在给定的监听套接字上有新的TCP连接。新连接到达时,监听器调用你给出的回调函数。两个函数中,base参数都是监听器用于监听连接的event_base。cb是收到新连接时要调用的回调函数;如果cb为NULL,则监听器是禁用的,直到设置了回调函数为止。ptr指针将传递给回调函数。flags参数控制回调函数的行为,下面会更详细论述。
2024-11-18 20:11:55
527
原创 Variadic function
va_list在某些实现中,va_list实际上只是一个指向栈中某个位置的指针,也可能是更复杂的结构,用于记录当前参数的位置和相关信息。va_startsizeofva_start的目的是初始化va_list变量ap。它将ap设置为指向最后一个已知参数(last)之后的位置,即第一个可变参数的起始位置。&last返回last在栈中的地址,加上就是下一个参数的地址。va_arg+=sizeofsizeofva_arg用于从va_list中获取当前参数,并将ap移动到下一个参数的位置。先将ap。
2024-11-18 20:10:58
845
原创 Helper types and functions (libevent
event2/util.h>定义了很多在实现可移植应用时有用的函数,libevent内部也使用这些类型和函数。
2024-10-25 11:03:27
700
原创 libevent_structure
libevent 中的事件配置项。通过使用结构体,可以在 libevent 中定义和管理多个事件配置项,并按照链表的方式进行链接和访问。每个配置项都包含一个要避免使用的网络通信方法TAILQ_ENTRY 见:[[Macro function]]
2024-10-14 22:58:34
1062
原创 Variadic function
va_list在某些实现中,va_list实际上只是一个指向栈中某个位置的指针,也可能是更复杂的结构,用于记录当前参数的位置和相关信息。va_startsizeofva_start的目的是初始化va_list变量ap。它将ap设置为指向最后一个已知参数(last)之后的位置,即第一个可变参数的起始位置。&last返回last在栈中的地址,加上就是下一个参数的地址。va_arg+=sizeofsizeofva_arg用于从va_list中获取当前参数,并将ap移动到下一个参数的位置。先将ap。
2024-10-14 22:55:41
850
原创 DNS with libevent
libevent提供了少量用于解析DNS名字的API,以及用于实现简单DNS服务器的机制。我们从用于名字查询的高层机制开始介绍,然后介绍底层机制和服务器机制。
2024-10-01 08:51:05
1178
原创 libevent - Macro function
TAILQ_INITTAILQ_INIT宏是一个用于初始化尾队列头部的工具,它通过将tqh_first设置为NULL并将tqh_last设置为指向tqh_first的地址,确保队列可以从空状态正确地过渡到非空状态。这个设计使用了二级指针的概念,使得尾部插入操作更为高效和直接。这种结构广泛应用于需要动态管理链表的系统编程场景中。这种结构确保了宏在使用时会像一个普通的语句一样执行,而不会引起语法错误。例如,用户可以安全地在if语句中使用这个宏,而不会因为缺少大括号导致错误tqh_firstNULL。
2024-09-27 19:21:31
712
原创 Memory management(libevent)
宏default definitionEVENT__DISABLE_MM_REPLACEMENT not definitionmm_mallocmm_callocmm_strdupmm_reallocmm_freememory allocation function:::
2024-09-25 23:12:42
434
原创 M1 card crack
这张卡就是本次实现的对象 ,一张废弃的校园卡,以下所有操作都以此卡展开我们使用flipper的NFC功能扫描该卡片。我们直接read我们得出最终结果该卡是M1 1K卡,也就是S50卡。Mifare 1卡是属于非接触式逻辑加密卡。MIFARE MF1是符合ISO/IEC 14443A的非接触智能卡。其通讯层(MIFARE RF 接口)符合ISO/IEC 14443A标准的第2和第3部分。其安全层支持域检验的CRYPTO1数据流加密。而CRYPTO1算法早已经在2015年宣布理论死亡。
2024-08-31 08:22:30
887
原创 设计模式-原型模式
当在我们的系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源(主要是构造函数的执行),用原型模式生成对象就很高效,直接内存式的拷贝。
2024-08-28 23:35:24
776
原创 设计模式-外观模式
Software entities like classes,modules and functions should be open for extension but closed for modifications 一个软件实体, 如类, 模块, 函数等应该对扩展开放, 对修改封闭.
2024-08-28 23:34:42
776
原创 设计模式-适配器模式
Rock老师买了一个日本进口机器人,机器人充电要求电压(110V)与国内插头标准电压(220V)不兼容,咋办? 解决方案: 设置一个适配器将插头输出的220V转变为110V以上的解决方案就是通过一个适配器来解决接口不一致的问题,使原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
2024-08-28 23:33:58
974
原创 设计模式-建造者模式
当一个类的构造函数参数有多个时,比如超过四个,而且这些参数有些是可选时,我们通常有两种方法来构建它的对象。例如我们现在有一个如下类Computer,其中CPU和ram 那么这两种方式有什么弊端呢?
2024-08-28 23:32:43
647
原创 设计模式-简单工厂模式
当我们的系统中存在大量同一类型的对象需要创建时,我们只需要传入一个正确的参数,就可以获取所需要的对象,而无需知道其实现过程。
2024-08-28 23:31:33
566
原创 设计模式-工厂方法模式
专门的工厂实现专门一类的产品。能解决简单工厂的创建方法中增加产品就要增加新的if-else的问题,解决这种做法带来的扩展性差,违背开闭原则,和影响到可读性等问题。
2024-08-28 23:30:40
524
c语言编写烟花代码源码(附带讲解文档)
2023-12-06
c++异常处理机制详解
2023-12-06
c++函数模板STL详解
2023-12-06
自己编写操作系统,运行ISO文件,遇到grub
2022-08-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人