自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 dpvs 笔记

keepalived TCP check模式 向后端服务建立连接,每隔connect_timeout时间检查套接字的状态,通过调用ipvs库更新dpvs的后端池信息。当使用ospf/ECMP来实现高可用,所以keepalived不需要配置vrrp功能。keepalived只使用后端服务健康检查功能。ECMP根据SIP-DIP对来选择路由。

2024-02-26 19:15:44 576

原创 Nginx笔记

2、当error_log配置日志级别是debug,没有配置日志类型时,所有的debug日志类型都会记录,因为在ngx_log_set_levels函数中。1、全局error_log配置修改的是cycle的log,即全局变量ngx_log。

2024-02-19 19:18:01 575

原创 go 固定数量协程并行处理多任务

情形:10个协程处理5000个task。

2024-01-08 20:48:35 425

原创 Mysql golang xorm 使用mysql数据库

【代码】Mysql golang xorm 使用mysql数据库。

2023-12-22 18:43:24 662

原创 源码升级gcc

打开/contrib/download_prerequisites,查看依赖的库。

2023-11-15 16:00:07 228

原创 Mysql 实战练习

表示查出interface表中所有 device_name 为 dev_name 的网口, 由于 interface表中没有device_name 字段,所以要联合device表查询,所以用条件 where device.id=interface.device_id 把 dev_name转换成 interface表中的device_id。表示 interface.name 是在 switch_line_port表中switch_name为 dev_name的所有port_name。

2023-11-13 17:27:11 204

原创 Nginx 惊群问题

当没有开启so_reuseport时,对于一个端口所有的worker进程共用一个监听套接字,每一个worker进程会把该监听套接字上的读事件注册到自己的epoll中,该监听套接字的等待队列也会有n(进程数量,每注册一次该套接字上的读事件,添加一个等待队列项)个等待队列项。当该监听套接字上有新连接来时,会遍历套接字的等待队列项,找到每一个进程监视的epoll,epoll会唤醒相应的worker进程,从而产生惊群问题。当唤醒该worker进程时,该事件可能已经被前面的处于运行状态的worker进程处理。

2023-11-03 17:32:46 146

原创 go 笔记

1、go build卡住不动。

2023-10-11 16:13:01 110

原创 dpdk 笔记

1、https://blog.csdn.net/weixin_39094034/article/details/1220973562、https://blog.csdn.net/weixin_42571882/article/details/107335010

2023-09-28 14:32:30 191

原创 cmake笔记

https://zhuanlan.zhihu.com/p/397394950https://blog.csdn.net/qq_38410730/article/details/102797448https://zhuanlan.zhihu.com/p/95771200https://zhuanlan.zhihu.com/p/141956373https://blog.csdn.net/LaineGates/article/details/108242803https://www.jianshu.co

2023-09-28 14:21:13 39

原创 c语言 static

使用命令gcc -c test_symbol.c -o test_symbol 编译。可以看到,0x58处的值为9,即静态局部变量初始值写入到目标文件中。可以得到 data段从文件地址0x58开始,长度为4字节。如下代码test_symbol.c。

2023-09-23 22:57:04 170

原创 bind9

bind9源码安装: https://blog.csdn.net/u011288801/article/details/106736607。

2023-09-14 19:40:39 54

原创 lock-free

是线程间共享一个指向数据结构的指针。每当一个线程企图修改数据结构的时候,它在线程局部创建一个当前数据结构的拷贝然后做出相应的修改。如果 compare_and_swap 失败则说明有其他线程抢先完成了修改,这个线程将重新读取共享指针并重复拷贝和修改的操作直到 compare_and_swap 成功。但是不难想到这种通用构建的效率并不高,因为它实质上阻止了任何对于数据结构的并发操作——任何时刻都只可能有一个线程成功修改共享的数据结构指针,其他线程的操作必然会失败和重试。

2023-03-29 15:04:55 104 1

原创 c语言 二维数组和 二级指针

char name[1][128] 是一个大小为1的数组, 数组的元素是大小为128的char型数组。char *argv[1] 是一个大小为1的数组,数组的元素是char型指针。如下代码, 把一个指针转换成char **, 再转换成原来的类型来使用,虽然有编译警告,但是运行时不会段错误。#include <stdio.h>void test_pp(char **argv){ // 把 char** 转变成 char (*)[128] char (*p)[128] =

2022-05-16 23:17:42 38

原创 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 355

原创 Linux shell -- 组合命令

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

2022-03-15 16:27:01 1784

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

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

2021-08-10 17:14:47 3152

原创 c语言错误笔记

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

2021-07-31 15:23:27 517

原创 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 247

原创 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 145

转载 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 324

原创 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 2038

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

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

2021-04-17 18:34:44 1475 1

原创 虚拟内存

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

2021-04-17 16:06:14 68

原创 c语言笔记 -- Makefile

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

2021-04-15 23:14:11 516

原创 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 276

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

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

2021-04-12 09:05:00 4235 5

原创 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 648

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

const...

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

原创 SNAT 与 DNAT

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

2021-04-09 15:10:59 100

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

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

2021-04-05 14:01:52 175

原创 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 174

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

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

2021-03-31 08:16:05 752

原创 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 678

原创 进程间通信--管道

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 68

原创 select函数

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

2021-03-28 14:23:05 179

原创 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 76

原创 linux 下离线安装软件

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

2021-03-26 13:14:31 141

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

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

2021-03-20 21:08:12 488

原创 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 1324

空空如也

空空如也

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

TA关注的人

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