自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

竹剑单

人生天地之间,若白驹之过隙,忽然而已

  • 博客(22)
  • 收藏
  • 关注

原创 netfilter+iptables 通过自定义match模块实现网络数据包过滤

使用该方法,可以实现在内核网络协议栈对数据包的处理过滤,因为函数可以拿到sk_buff参数,从该结构体可以拿到数据包所有数据。如果要对应用层过滤,要知道应用层协议的数据包结构,以及数据没有被加密,才能进一步进行解析和处理过滤。该种方式支持用户自定义防火墙过滤规则,加强了防火墙的功能。

2023-06-04 22:31:45 751

原创 [boost库] BOOST_AUTO和BOOST_TYPEOF用法

BOOST_AUTO和BOOST_TYPEOF属于``,是用于类型推导的宏定义。`BOOST_AUTO(a, b)` 声明一个类型为表达式b类型的变量a,并且用表达式b初始化a其实BOOST_AUTO也是调用的BOOST_TYPEOF 推导出表达式b的类型,并且声明该类型的一个变量a,可以初始化也可以不初始化。...

2022-07-12 01:52:53 567

原创 C++ 三个线程循环递增输出

//compiler g++ 4.8#include <iostream>#include <thread>#include <mutex>#include <condition_variable>using namespace std;mutex mt;condition_variable cv;int number = 0;int point = 0;void func_a(){ int num = 34; whi

2021-06-17 02:35:19 368

原创 C++ 多线程 用条件变量确定线程的执行顺序而不是使用 sleep(1)

使用 sleep(1)这几天学习多线程里的互斥锁和条件变量,想要实现一个功能,线程 A 对一个全局变量进行递增操作,当变量符合某个要求的时候,用线程 B 输出。代码内容:线程 1 使用 add 方法对 point 进行递增到 100,point 可以被 5 整除时线程 B 对其进行输出。实现方法1:// compiler g++ 4.8mutex mt;condition_variable cv_1;static int point = 0;int status = 0;void add

2021-06-17 02:17:39 1446 1

原创 CentOS 7 man 显示 No manual entry for XXX section X

默认的 man 是不完整的[root@DayDayUp helloworld]# man 3 fopenNo manual entry for fopen in section 3解决办法:yum install man-pages

2021-06-14 21:48:18 469

原创 CentOS 7 安装 debuginfo-install glibc-2.17-324.el7_9.x86_64

系统为腾讯云服务器 CentOS 7首次用 gdb 调试时,出现Missing separate debuginfos, use: debuginfo-install glibc-2.17-324.el7_9.x86_64 libgcc-4.8.5-44.el7.x86_64 libstdc+±4.8.5-44.el7.x86_64执行 debuginfo-install glibc-2.17-324.el7_9.x86_64 时却失败:[root@XuanYuan helloworld]#

2021-06-12 22:27:56 4279 2

原创 C++ 函数指针变量和类型

要调用的函数int gg(int a, int b){ return a + b;}函数指针变量 int (*f1)(int, int); //1 function<int(int, int)> f2 = gg; //2 f1 = gg; f1(1, 2); f2(1, 2);函数指针类型 typedef int (*func1)(int, int); //1 using func2 = int (*)

2021-06-09 19:06:02 109

原创 C++ 向上转型和向下转型的含义以及使用场景

向上转型派生类对象转型为基类对象(包括指针和对象),直接转化由编译器自动完成,不用cast,并且是绝对安全的。内存里面:基类对象相当于只是换了个地址。换成了派生类对象中存储基类成员的内存地址。但是派生类对象中有的,基类没有的那些变量仍然留在了内存中。(保留了再次从基类转换成派生类的可能性)向下转型不能在对象之间转换。只能在指针和指针之间、基类左值和派生类引用之间转换。危险是什么意思?应该是指把基类对象的地址给了派生类对象(向下转换)。派生类对象如果拥有自己独有,而基类没有的成员变量,就是危险的。因

2021-06-04 22:03:29 2606 2

原创 C++ RTTI 机制下判断类型的 typeid 和记录类型信息的 type_info

RTTIRTTI(RunTime Type Identification),运行时类型识别。C++ 是允许在程序运行过程中,根据指针和引用的实际类型来决定执行方法的(动态多态)。因为运行时变量声明的类型和实际的类型可能不一样,所以就有了RTTI。RTTI包含两个内容:typeid 和 dynamic_cast。typeid 用来确定目标的实际类型是什么。dynamic_cast 用于基类向派生类的向下转型。typeid用于判断目标类型。typeid(n),参数n可以是类型、变量、字面量等,typeid

2021-06-04 01:24:00 988

原创 C++ using 关键字的三种作用

使用命名空间编程过程中有很多的类名和函数名,很容易重复,因此C++引入了命名空间供开发者使用。C++ 最有名的就是 STL 库(Standard Template Library)了吧。using namespace library; //作用域中出现的没有指明命名空间的函数都会去library库中搜索,有符合的就调用using library::function //作用域中使用function函数时,会调用library库中的该函数//当同一个函数在使用的多个库中有命名重复时,编译器会报错,

2021-06-01 05:49:10 767

原创 C++ typename 模板参数和标识嵌套依赖类型名的作用

模板类型参数在泛型编程中,typename 和 class 都可以作为模板类型参数,是一样的。template<class T> //等同于 template<typename T>class Animal {public: T name;};在模板中标识嵌套依赖类型名称规则:不管是在模板函数还是模板类中,如果有使用 嵌套依赖类型名称 nested dependent type name 的话,都需要在他的前面加上 typename。先不管概念,直接从实际出发看看

2021-06-01 03:41:04 860

原创 C++ 内存对齐

内存对齐存在的意义为了加快CPU读取内存的效率。CPU读取内存并不是一个字节一个字节地读取,而是两个、四个、八个…三十二个地读取,一次读取大小叫做内存存取粒度。为了配合这样的读取方式,才有了内存对齐的要求。如果CPU一个一个字节地读取,就不需要内存对齐了。所谓的“加快”,指的是让CPU读取的时候一次尽量可以读出完整的数据,而不是分几次读取。内存对齐的规则可以通过#pragma pack(n)设置内存对齐的字节数,其中 n = 1, 2, 4, 8, 16。gcc 默认n = 4。1、对齐单位等于内存

2021-05-29 17:59:12 181 1

原创 C++ 逐步解析 (func)*((int*)*(int*)(&d)) 如何获取虚函数表以及虚函数地址

虚函数的作用、原理等具体内容可以看我的另一篇文章 C++ 虚函数详解这里讨论如何通过对象找到他的虚函数表还有相应的虚函数。相关概念:变量:不管是用int还是int*声明的变量,本质上都是一样的,都存储在内存中,都具有两个要素:地址和内容。地址:指变量存储在内存中的地址,一般用16进制表示,如0x61febc。可以用 & 对一个变量进行取址,返回的就是变量地址。内容:指存储在内存中的内容,如char大小为一个字节,那么他就可以表示2的8次方个字符。(ASCII码决定了什么数位表示什么字符)。

2021-05-29 15:18:12 851 2

原创 C++ 类成员的访问权限和类的继承方式

类成员的访问权限类的成员包括成员变量和成员函数。他们的访问权限由pulibc、protected、private决定。省略不写时(默认)等同于private。1、public:公开的,在派生类中可以访问,外部也可以通过对象访问。2、protected:保护的,在派生类中可以访问,外部不能通过对象访问。3、private:私人的,派生类和对象都不能访问。这里说的不能通过对象访问,包含由本类 new 出来的对象。所以只有当成员为public时,才可以通过对象访问。类的继承方式类成员的访问权限

2021-05-27 22:53:50 603

原创 C++ 虚函数详解

文章目录虚函数的作用虚函数的原理:虚函数表指针和虚函数表虚函数表存储虚函数的顺序析构函数和虚函数纯虚函数虚函数的作用虚函数是为了实现动态多态。多态是指为不同的数据类型提供统一的接口,分为静态多态和动态多态。静态多态包括函数重载和模板函数,动态多态是:指针或引用类型可以根据运行中实际指向的派生类型的不同,来执行不同派生类的方法。举个例子,有一个基类 Character 表示职业统称,玩家会选择职业战士 Warrior 或者魔法师 Magician,然后所有的逻辑例如攻击,防守都会根据玩家选择的不同职业有

2021-05-27 14:17:12 9039 7

原创 Markdown 简单使用

前言  之前我用的都是富文本编辑,单纯因为Markdown看起来好像很复杂不想学。现在看了看,挺简单的,我先把我要用到的语法记下来,以后要用到什么再拓展。(我最近才知道原来github上的.md后缀的文件是Markdown文件的意思)基本语法写博客时在特殊字符前加上转义字符\就可以输出该字符标题#+空格+标题,如 # 标题(几个#表示几级标题)目录在开头加上 [toc] (部分平台支持,如CSDN)文字样式样式描述输入输出斜体前后加一个**内容*内容

2021-05-21 13:11:48 95

原创 VS Code 运行C++程序以及TASKS.JSON和LAUNCH.JSON文件的基础配置

1. 使用VS Code运行C++程序1) 使用终端的命令行//hello.cpp#include <iostream>int main(){ std::cout << "hello world!" << std::endl; return 0;}打开终端,在命令行中输入 g++ -o hello hello.cpp即可完成编译然后输入 ./hello 即可执行文件这样子直接使用命令行,那还要VS Code干嘛,不如直接用w

2020-11-25 04:26:01 6688

原创 Java重写equals方法的同时也要重写hashcode方法

1.什么是equals方法源码中的注释:equals方法实现了非空对象的引用之间的等价关系* The {@code equals} method implements an equivalence relation on non-null object references:public boolean equals(Object obj) { return (thi...

2019-04-20 15:44:52 234

原创 Java中的类修饰符、成员变量修饰符、方法修饰符

1.类修饰符public :所有位置都可以访问该类friendly(默认):同一个包中的类可以访问,可以被继承(包括别的包中的类)final:声明为最终类,不能被继承abstract:抽象类,抽象类不能被实例化,只能被继承,且子类需要实现抽象类中所有的抽象方法接口中所有的方法都是默认public abstract,所有的成员变量都默认是final static个人认为,类声...

2019-01-29 19:58:42 889

原创 解释一个简单Java代码的Class文件

分析Java文件生成的Class文件是很有用的,可以帮助了解程序在JVM中的执行过程一个简单的Java源代码Hello.javapublic class Hello{ public static void main (String [] args){ int i = 0; }}在cmd输入 javac Hello.java 编译生成 Hell...

2019-01-29 01:55:06 433

原创 Java Class文件格式、常量池项目的类型、表的结构

* u1、u2、u4分别代表1字节、2字节、4字节目录1.Class文件格式2.常量池项目类型3.类访问标志4.字段表5.方法表6.属性表 1.Class文件格式magic:魔数,值为0xcafe baby,表示这是一个可以被虚拟机接收的class文件。很多文件存储标准都使用魔数进行身份识别,比如gif,jpeg。使用魔数而不是文件后缀名的是因为后缀名可以随...

2019-01-29 00:44:13 2204

原创 打开eclipse出现 no java visual machine was found解决方法

打开eclipse配置文件eclipse.ini把-vm的下一行修改为javaw.exe的正确地址例如G:\Java\JDK\bin

2018-08-03 02:17:35 512

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除