自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(341)
  • 收藏
  • 关注

原创 C++ 引用 与 const

int &refVal4 = 10; 错误const int &r2 = 42; 合法const auto &j = 42; 合法对常量的引用,即常量引用,可以绑定非常量的对象,字面值,一般表达式。const int &r2 = 42; 是 合法的,因为 等效于const int tmp = 42; // 由字面值生成一个临时的整型常量const int &r2 = tmp; // 让r2绑定这个临时量int &refVal4 = 10; 是非

2022-05-08 22:23:31 264

原创 Linux shell -- 组合命令

1、删除指定目录下所有符号链接find 查找目录 -type l | xargs rm

2022-03-15 16:27:01 1346

原创 vmware 让虚拟机接入到主机所在的网络中

1、如下图所示, VMnet0 是 桥接到主机网卡的虚拟网卡。2、在配置虚拟机网络时,将网络连接设置成自定义VMnet0, 虚拟机就可以桥接到物理网卡。3、主机网卡可以设置多个IP地址。如下图所示,点击高级可以设置多个IP地址。这样设置的IP地址,可以和虚拟机通过桥接 到同一个网段。...

2021-08-10 17:14:47 2663

原创 c语言错误笔记

c语言错误笔记1、error: expected ‘;’, ‘,’ or ‘)’ before ‘switch’原因:switch 是关键字,不能被声明成一个变量

2021-07-31 15:23:27 181

原创 nginx学习笔记 --http模块

http模块数据结构ngx_module_t数据结构ngx_module_tngx_module_t ngx_core_module = {struct ngx_module_s { ngx_uint_t ctx_index; ngx_uint_t index; char *name; ngx_uint_t spare0; ngx_uint_t

2021-04-22 23:54:44 127

原创 C语言笔记 -- I/O

I/O标准库IOfopenerrno与perror函数以字节为单位的标准库IO函数标准库IOfopenfopen函数原型如下:#include <stdio.h>FILE *fopen(const char *path, const char *mode);//返回值:成功返回文件指针,出错返回NULL并设置errno其中,mode参数是一个字符串,+表示增强功能,"r+"表示不仅可以读,还可以写;"w+"表示不仅可以写,还可以读;"a+"表示不仅可以追加数据,还可以读;FIL

2021-04-21 23:35:30 80

转载 Linux 3.13.0 netfilter 学习笔记 之二 IP层netfilter hook点

基于linux2.6.21上一节分析了hook机制,本节简单介绍下三层防火墙借助hook机制,实现的总体框架三层netfilter hook点的注册与注销我们知道使用iptables,添加规则时需要指定表,在iptables中有filter、nat、mangle三张表,因为我们接下来几节分析的内容也是从这三个table表加上连接跟踪,此处我们也已这四个模块来将,而不是按HOOK点的分类来分析filter机制相关的hook注册Filter表主要在以下几个hook点上其作用:NF_IP_LOCAL_

2021-04-19 22:46:45 168

原创 Linux3.13.0 netfilter 学习笔记 之一 HOOK机制

netfilter介绍Linux netfilter就是借助一整套的 hook 函数的管理机制,实现数据包在三层以上的过滤、地址转换(SNAT、DNAT)、基于协议的连接跟踪。我们所说的内核的netfilter,应该包括二层数据的filter操作,以及对三层及三层以上数据的filter等操作。只不过二层的filter实现与三层及三层也上的filter实现有所不同。其中二层的filter与应用层程序ebtables结合使用,而三层及以上的filter结合iptables使用。但是二层filter与三层fi

2021-04-18 13:23:32 526

原创 error: stray ‘\302’ in program/error: stray ‘\240’ in program解决方法

1、将.c文件的代码复制到本地的txt文档中保存为ANSI编码格式2、打开文件后,文件中有很多?,复制其中一个?号后,复制替换成普通的空格。如下图所示,经过替换后的文本没有无效字符了。...

2021-04-17 18:34:44 619

原创 虚拟内存

操作系统笔记 -- 虚拟内存虚拟内存作为缓存的工具页表功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入虚拟内存作为缓存的工具虚拟内存被组织为一个由存放在磁盘上的 N个连续的字节大小的单元组成的数组。每字节都有一个唯一的虚拟地址,

2021-04-17 16:06:14 34

原创 c语言笔记 -- Makefile

1、Makefile介绍把Makefile 文件和源代码放在同一个目录。make 命令会自动读取当前目录下的 Makefile 文件。Makefile 由一组规则(Rule)组成,第一条规则的目标称为缺省目标,只要缺省目标更新了就算完成任务了,其它工作都是为这个目的而做的。如果在 make 的命令行中指定一个目标(例如 clean),则更新这个目标,如果不指定目标则更新 Makefile 中第一条规则的目标(缺省目标)。每条规则的格式是:target ... : prerequisites

2021-04-15 23:14:11 175

原创 C语言笔记 -- 静态库 和动态库

1、静态库1)使用gcc -c 命令 将多个c源文件编译成可重定位目标文件。例如:gcc -c stack/stack.c stack/push.c stack/pop.c stack/is_empty.c2)使用ar rs 命令将多个可重定位目标文件打包成静态库。库文件名都是以lib开头的,静态库以.a作为后缀 ,表示Archive。ar命令将目标文件打包成静态库,选项r表示将后面的文件列表添加到文件包,如果文件包不存在就创建它,如果文件包中已有同名文件就替换成新的。选项s是专用于生成..

2021-04-14 21:43:24 125

原创 C++笔记 -- 输出运算符 << 和 输入运算符 >>

<< 运算符接收两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值。此运算符将给定的值写到给定的ostream对象中。该运算符的计算结果是其左侧的运算对象,即要写入给定值的那个ostream对象。例如:std::cout << "Enter two numbers:" << std::endl;由于第一个<<运算符的结果是第二个<<运算符的左侧运算对象,因此可以将输出请求连接起来,上面表达式等价于(st

2021-04-12 09:05:00 2172 4

原创 c语言笔记 -- 局部变量的内存地址

对于同一个函数调用,处于不同的栈帧,则其栈帧的起始地址不同,那么函数中的局部变量的存储地址也就不同。如下代码所示,func函数在递归调用中,在不同的栈帧中变量a的地址不同。#include <stdio.h>void func() { int a = 5; int *const q = &a; printf("%d\n", q); func();}int main(int argc, char const *argv[]){

2021-04-10 23:46:18 289

原创 C++笔记 -- const和constexpr

const...

2021-04-10 19:01:17 139 2

原创 SNAT 与 DNAT

SNAT 请求时将ipA转换成ipB, 响应时将ipB转换成ipA。在这个过程中,修改了请求报文的源地址,用于局域网访问互联网。如下图所示:DNAT请求时将ipB转换成ipA,响应时将ipA转换成ipB。在这个过程中,修改了请求报文的目标地址,用于互联网访问局域网。如下图所示...

2021-04-09 15:10:59 50

原创 C语言笔记 -- 定义和声明

函数原型:声明了一个函数的名字、参数类型和个数、返回值类型。函数原型为编译器提供了有用的信息,编译器在翻译代码的过程中,只有见到函数原型(不管带不带函数体)之后才知道这个函数的名字、参数类型和返回值,这样碰到函数调用时才知道怎么生成相应的指令,所以函数原型必须出现在函数调用之前,这也是遵循“先声明后使用”的原则。函数声明:在 函数原型 后面加;号结束,而不写函数体的是函数声明函数定义:在函数原型后带函数体的就是函数定义。编译器只有见到函数定义才会生成指令,而指令在程序运行时要占存储空间。..

2021-04-05 14:01:52 55

原创 epoll机制

1、创建epoll例程 #include <sys/epoll.h> int epoll_create(int size); // 成功时返回epoll文件描述符,失败时返回-1调用epoll_create函数时创建的文件描述符保存空间称为“epoll例程”。参数size并非用来决定epoll例程的大小,而仅供操作系统参考。该函数返回的文件描述符主要用于区分epoll例程。2、向epoll例程内部注册监视对象文件描述符调用epo

2021-04-04 16:01:02 82

原创 C++ 笔记 -- 取地址运算符和引用

当操作符&作为取地址运算符时,假设char ch = 'a';那么&ch是一个右值,而不是一个合法的左值。因为该表达式并未标识任何机器内存的特定位置,对&ch进行求值时,其结果没有地方存储,所以&ch不是一个合法的左值。在c++中,将声明符写成&d的形式来定义引用类型,其中d是声明的变量名。引用和它的初始值对象绑定在一起,引用是其绑定对象的别名。int i = 1024;int &refVal = i;refVal = 2;

2021-03-31 08:16:05 561

原创 onvif 客户端和服务器下载

虚拟 ipc 下载onvif server :http://www.happytimesoft.com/products/multi-onvif-server/index.htmlhttp://www.happytimesoft.com/products/onvif-server/index.htmlonvif client 下载:http://www.happytimesoft.com/products/onvif-client/index.html

2021-03-30 18:33:35 293

原创 进程间通信--管道

1)pile函数用于创建管道 #include <unistd.h> int pipe(int pipefd[2]);调用pipe函数创建管道,pipefd数组保存用于I/O的文件描述符。函数参数是长度为2的int型数组的地址值,其中pipefd[0] 是通过管道接收数据时使用的文件描述符,即管道出口;pipefd[1]是通过管道传输数据时使用的文件描述符,即管道入口。管道并非属于进程的资源,而和套接字一样,属于操作系统。fork函数复制的是用于.

2021-03-28 17:24:58 25

原创 select函数

使用select函数可以将多个文件描述符集中到一起统计监视,监视项包括:那些套接字存在待读取数据?那些套接字存在待无阻塞传输数据?那些套接字发生了异常?select函数调用过程:1)设置文件描述符、指定监视范围、设置超时2)调用select函数3)查看调用结果设置文件描述符首先将要监视的文件描述符集中到一起,集中时按照监视项(接收、传输、异常)区分而分成3类。使用fd_set数组变量将要监视的文件描述符集中到一起。该数组是存有0和1的位数组。如果数组中某个位的值为1,

2021-03-28 14:23:05 88

原创 socket 编程 笔记

1、socket 编程1)调用socket函数来创建套接字。#include <sys/socket.h>int socket(int domain, int type, int protocol);参数domain指定协议族信息,可以是PF_INET (ProtocolFamily_INET), 指的是IPv4协议族,socket编程中标识符包含的INET和in指的都是IPv4。参数type指定套接字数据传输方式,可以是面向连接的TCP套接字SOCK_STREAM, 也可

2021-03-26 21:59:46 35

原创 linux 下离线安装软件

可以在相同版本的能够联网的系统上编译并静态链接生成该软件的可执行文件,然后拷贝到离线的系统上。

2021-03-26 13:14:31 77

原创 C语言笔记 -- 处理僵尸进程

调用fork函数创建的子进程的终止方式:1)调用exit函数并使用exit函数传递参数 ;2)main函数中调用return函数并返回值。fork函数创建的子进程虽然被终止,但是操作系统不会销毁子进程,这样的进程就是僵尸进程。向exit函数传递的参数值和main函数中return语句的返回值都会传递给操作系统,只有这些值被传递给创建该子进程的父进程,这些终止的子进程才会被销毁。如果父进程没有主动要求(通过函数调用)获得子进程的结束状态值,操作系统会一直保存,并让子进程长期处于僵尸进程的状态。

2021-03-20 21:08:12 298

原创 C语言笔记 -- 优先级

1、赋值运算符的优先级小于 比较运算符的优先级如下代码所示, 当函数func返回值大于0时,b = 1,条件成立,运行打印语句;当函数func返回值小于等于0时,b = 0,条件不成立,不会运行打印语句。#include <stdio.h>int func() { int a = 4; return a;}int main(int argc, char const *argv[]){ int b; if (b = func() > 0)

2021-03-19 15:18:04 465

原创 C语言笔记-- 常用函数使用

1、perror函数void perror(const char *s);perror函数会根据errno打印发生错误的原因,但是不会自动退出程序。退出程序需要手动调用exit()函数2、fputs函数int fputs(const char *s, FILE *stream);fputs函数是向文件输出字符串,不能格式化输出字符串,格式化输出字符串用printf家族的函数3、read函数ssize_t read(int fd, void *buf, size_t count..

2021-03-17 23:02:46 25

原创 hmailServer邮箱服务器搭建 以及客户端无法连接的hmail服务器的问题

1、下载安装hmailserver服务器,可以选择使用hmail自带的数据库。2、参考:https://blog.csdn.net/antma/article/details/1069376593、添加域test.com 以及用户admin@test.com:4、可以修改hosts文件来解析域名 mail.XXX.XXX (XXX.XXX是在邮箱服务器中注册的域)5、在outlook用添加用户:6、最后可以使用账户admin@test.com向其他邮箱发送邮件。...

2021-03-11 18:07:14 1445

原创 C语言笔记 -- 链接

1、将C源文件编译成可执行文件的过程:1)编译器驱动程序(compiler driver)运行预处理器,将C源文件翻译成一个中间文件 .i2)编译器驱动程序(compiler driver)运行编译器,将.i 文件翻译成一个汇编语言文件.s3)编译器驱动程序(compiler driver)运行汇编器,将.s文件翻译成一个可重定位目标文件.o4)编译器驱动程序(compiler driver)运行连接器,将多个.o文件以及一些必要的系统目标文件组合成一个可执行目标文件。2、...

2021-03-03 22:39:27 54 2

原创 C语言笔记 -- typedef 与 函数指针

typedef可以用来定义函数类型,如下所示定义函数类型F:typedef int F(void);这种类型的函数不带参数,返回值是 int。如下声明定义了一个函数指针:int (*fp)(void);该指针指向的函数不带参数,返回值为int 。 所以 该声明等同于F *fp;...

2021-03-02 17:20:01 230

原创 2021-02-14

import java.util.PriorityQueue;public class TestPriorityQueue { public static void main(String[] args) { PriorityQueue<Integer> pq = new PriorityQueue<>(); pq.offer(4); pq.offer(5); pq.offer(8); pq.

2021-02-14 16:05:36 16

原创 程序是怎么跑起来的笔记 -- 数据使用二进制表示的

CPU 和内存都是 IC(集成电路) 的一种。IC 的所有引脚, 只有直流电压0V 或 5V两个状态。 也就是说, IC 的一个引脚, 只能表示两个状态。IC 的这个特性, 决定了计算机的信息数据只能用二进制数来处理。 IC 的一个引脚表示二进制数的 1 位。位是最小单位,字节是基本单位。 内存和磁盘都使用字节单位来存储和读写数据, 使用位单位则无法读写数据。 因此, 字节是信息的基本单位。左移后 空出来的低位要进行补0 操作。 不过, 这一规则只适用于左移运算。移位操作使最高位或最低位溢出的数字,

2021-01-31 18:43:17 54

原创 程序是怎么跑起来的笔记 -- CPU

1、程序是指示计算机每一步动作的一组指令,程序由指令和数据组成。2、机器语言是CPU可以直接识别和使用的语言。3、正在运行的程序存储在内存中。硬盘和磁盘等媒介上保存的程序被复制到内存后才能运行。4、内存地址是在内存中,用来表示指令和数据存储位置的整数值。、5、CPU负责程序的解释和运行,并控制整个计算机。...

2021-01-30 17:00:07 119 1

转载 C语言笔记 -- 系统调用

用户进程可以通过系统调用向操作系统发起请求,希望操作系统替自己去完成某项操作,但是操作系统怎么完成取决于自己而且不受进程控制,进程也不知道操作系统是如何完成请求的,这是现代操作系统实现进程、多任务、虚拟内存等重要功能一个基本前提。CPU的工作模式有 用户模式(User mode) 和 内核模式(Kernel mode)。当CPU执行用户程序的指令时,操作系统把CPU的工作模式设置为用户模式,CPU不能执行所有的机器指令(比如I/O操作类指令,这类指令被称为特权指令),只能访问部分的内存空间。在内核模式下

2021-01-29 19:02:15 814

原创 C语言笔记 -- 类型转换

从较小类型转换成较大类型称为升级,从较大类型转换成较小类型称为降级。类型升级通常不会有什么问题,因为类型升级是用大的空间来存储较小类型的数据,会造成一些空间上的浪费。而类型降级会导致真正的麻烦,因为较低类型可能放不下整个数字。...

2021-01-28 10:39:37 45

原创 C语言笔记 -- 函数参数为指针变量时的参数传递

当函数的参数是一个指针时,传递给函数是实参指针的一个拷贝,所以改变形参指针并不会改变实参指针。如下例所示,函数strlen会修改形参指针str,但是main函数调用函数strlen返回后,实参指针str仍然指向字符串"nowisthetime"的首地址。此外,strlen函数的形参const char *str是一个指向常量的指针,而实参char *str 并不是一个常量对象。也就是说一个指向常量的指针只是无法通过该指针修改所指向的对象的值,该指针可以指向一个非常量对象,而且那个对象的值可以通过...

2021-01-14 14:40:34 1244

原创 C语言笔记 -- 指针表达式

后缀++操作符的优先级高于*操作符, 这两个操作符的结合性是从右向左的。1、*cp++ 表达式的计算分3个步骤,(1)++操作符产生cp的一份拷贝;(2)++操作符将cp的值加1,使cp指向下一个内存单元;(3)最后,在cp的拷贝上执行间接访问操作。所以该表达式返回的结果仍然是cp指向的内容,并让cp指向下一个内存单元。2、(*cp)++ 表达式的计算:(1)加上括号,使它先执行间接访问操作; (2)++操作符先产生*cp的一份拷贝,然后++操作符将*cp加1;(3)最后,返回*cp的拷贝。

2021-01-13 15:06:58 80

原创 C语言 IO 笔记

Linux系统 使用Ctrl + D 输入 结束符EOF

2021-01-11 14:40:24 68

原创 virtualbox虚拟机导出ova文件,然后导入到vmware

将ova文件导入到vmware后,可以在虚拟机配置中先移除多余的网卡,或者把原来的网卡都移除,然后重新添加网卡。这样就能解决导入ova文件的虚拟机无法上网的问题。

2020-12-28 10:30:47 1802

原创 Java打印一维和多维数组

System.out.println(Arrays.deepToString(matrix)); int[][] matrix = new int[][] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; System.out.println(Arrays.deepToString(matrix)); // 结果为[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

2020-12-19 14:59:31 117 1

空空如也

空空如也

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

TA关注的人

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