自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jackywgw的专栏

c/c++ linux php web mysql python tcp/ip shell java

  • 博客(105)
  • 资源 (7)
  • 收藏
  • 关注

原创 TCP 滑动窗口/TCP 接收和发送缓冲区/内核sock接收和发送缓冲区

一个socket在内核中有两个缓冲区,分别为接收和发送缓冲区。struct sock { …… struct sk_buff_head sk_receive_queue;—-接收队列 struct sk_buff_head sk_write_queue;——发送队列 …… }; 2. socket编程中可以通过以下API设置:setsockopt

2017-11-03 11:37:06 2726 3

原创 TCP/IP学习--------------- MSS

MSS(max segment size: 最大报文段长度):TCP 可以发送的最大数据长度, 不包括IP首部(20字节)和TCP首部(20字节)。 1. MSS 默认是536字节。 20字节IP首部 + 20字节TCP首部 + 536字节MSS = 576字节的IP数据报文 2. MSS一般为出口MTU值减去IP首部和TCP首部 如MTU为576字节, 则对应的MSS = 576-20

2017-11-03 10:26:24 840

原创 快速排序算法

#include <stdio.h> #include <st

2017-11-01 14:59:10 353

原创 基于字符串的分离链接hash算法

Hashes 问题:你有一个很大的字符串数组。需要知道另外一个字符串是否在这个字符串数组中。你可能会将这个字符串与数组中的字符串依次作比较。但是实际中,你会发现这种方法太慢。必须找其它的方法。但是除了依次比较字符串外,还有没有其它方法来知道某个字符串是否存在呢? 解决方案: Hashes。 Hashes是用小的数据类型(如,数字)来表示其它大的数据类型(通常是字符串)。

2017-10-25 14:56:03 355

原创 linux 网桥接收处理流程

linux 网桥接收处理流程

2017-10-23 17:38:40 1200

原创 linux网桥处理函数学习------br_handle_frame_finish

/* note: already called with rcu_read_lock */int br_handle_frame_finish(struct sock *sk, struct sk_buff *skb){ const unsigned char *dest = eth_hdr(skb)->h_dest; struct net_bridge_port *p = br

2017-10-20 17:10:59 2617

原创 linux网桥处理函数学习-----br_handle_frame

/* * Return NULL if skb is handled * note: already called with rcu_read_lock */rx_handler_result_t br_handle_frame(struct sk_buff **pskb){ struct net_bridge_port *p; struct sk_buff *skb =

2017-10-20 15:32:55 2903

原创 syn flood攻击防范

2017-09-26 16:54:11 476

原创 libevent 事件的优先级队列

多个事件同时触发时,libevent每一定义各个回调函数的执行顺序。可以使用优先级来定义某些事件比其它事件更重要。libevent里面的优先级队列就是active队列数组,当epoll返回event时,根据event对应的优先级放入队列的active数组列表中,实现了优先级的概念 1. event_Base的优先级队列libevent中,每个event_base都有与之相关的一个或者多个优先级。

2017-09-26 15:51:58 2010

原创 git push 时常见错误

git push -u origin master------------------------------------------------------------------------------错误 1. -------------------------------------------------------------------------------er

2017-09-26 10:41:24 1534 1

原创 静态对象的初始化

//============================================================================// Name : StaticObjectsInFunctions.cpp// Author : gwwu// Version :// Copyright : Your copyright notic

2017-08-29 10:14:19 1172

原创 c++中的引用

//============================================================================// Name : FreeStandingReferences.cpp// Author : gwwu// Version :// Copyright : Your copyright notice

2017-08-28 17:01:24 723

原创 c++学习----const常量折叠

//============================================================================// Name : Constant_folding.cpp// Author : gwwu// Version :// Copyright : Your copyright notice// Des

2017-08-24 17:35:03 374

原创 C++中struct 和 class的sizeof大小

//============================================================================// Name : Sizeof.cpp// Author : gwwu// Version :// Copyright : Your copyright notice// Description :

2017-08-23 14:12:05 897

原创 First head 设计模式学习c++实现------模板方法模式(Template method pattern)

模板方法模式: 在一个方法中定义一个算法的骨架,而将一些步骤推迟到子类中。 /* * CaffeineBeverage.h * * Created on: Aug 16, 2017 * Author: gwwu */#ifndef CAFFEINEBEVERAGE_H_#define CAFFEINEBEVERAGE_H_#include <iostream>usin

2017-08-16 15:16:10 307

原创 linux shell命令查看接口索引--ip link show

AH-00c080:/tmp/home/admin$ ip link show1: lo: mtu 65536 qdisc noqueue state UNKNOWN     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: tunl0@NONE: mtu 1480 qdisc noop state DOWN

2017-08-03 17:57:18 8155 1

原创 __attribute__ ((packed)) 的作用

看到内核代码里面有attribute ((packed)) ,感觉比较奇怪,查了百度后知道其作用。 attribute ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,在windows下,用vc的编译器也不是紧凑的,用tc的编译器就是紧凑的。例如: 在T

2017-08-01 17:39:40 678

原创 C++ Vector size和capcity的增加方式

创建一个vector对象vector a;后, vector对象a的size和capacity都是0。 当插入第一个元素后,size和capacity都变为1 当插入第二个元素后,size和capacity都变为2 当插入第三个元素后,size变为3, 由于capacity为2,小于3, 则capacity=capacity*2,变成4 …… 当插入第五个元素后,size变为5, 由于ca

2017-07-14 16:06:15 2989

原创 自动创建proc文件

#include <linux/module.h> #include <linux/sched.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> #include <linux/uaccess.h> #include <linux/slab.h> typedef struct proc_private_data

2017-07-12 15:33:47 308

原创 自动注册/proc文件

static int counter_proc_show(struct seq_file *m, void *v){ seq_printf(m, linux_proc_banner, utsname()->sysname, utsname()->release, utsname()->release, utsname()->version); /* seq_printf(m

2017-07-12 15:28:46 312

原创 c++ Eclipse 中文乱码

c++ 代码使用Eclipse时,cout 输出中文时是乱码。修改:在Window->Preferences->General->Workspace   面板Text file encoding 选择UTF-8

2017-07-07 16:40:54 1215

原创 设计模式学习之------State模式(状态模式)

什么是状态模式状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 1. 这个模式将状态封装成为独立的类,并将动作委托到代表当前状态的对象,我们知道行为会随着内部状态而改变。 2. 使用组合通过简单因为不同的状态对象来造成类改变的假象。 /* * IState.h * * Created on: Jul 4, 2017 * Author: gwwu

2017-07-06 16:25:29 223

原创 linux 内核学习----------模块(LKM:loading kernel module)

可加载内核模块(LKM)Linux内核是模块化组成的,允许内核在运行的时候以模块的形式动态地添加或删除代码。 优点:保证基本内核小,动态增加和删除module_init /module_exitmodule_init 将模块的入口函数注册到系统中 module_exit 将模块的出口函数注册到系统中加载/卸载模块最简单的加载方法是insmod命令, 一般要以root身份运行命令 insmod

2017-06-30 17:25:33 1113

原创 pthread_exit ---- 不能使用局部变量作为参数返回

在使用pthread_exit 返回一个void型指针,该指针指向的数据必须不能是线程内部的局部变量,因为随着线程的退出,局部变量被摧毁,变成不确定的内存内容了。 下面的程序比较了使用线程内部的局部变量和全局变量作为pthread_exit返回指针指向的数据内容。其中全局变量可以返回正确的值,而局部变量设置的值已经不一样了。#include <stdio.h>#include <stdlib.h

2017-06-27 17:54:32 1035

原创 pthread_exit-----在linux主线程中的用途

大家都知道在一个线程中调用pthread_exit表示退出一个线程,并且pthread_exit的参数作为返回值提供给pthread_join函数获取。 那么如果在main函数创建了若干个线程后,在main函数最后调用pthread_exit会怎么样呢?已经创建的线程会不会随着main线程的退出而退出呢? 如果在main函数中调用的是exit,那么答案是所有线程随着main线程退出而退出。 但

2017-06-27 17:18:00 3001

原创 查看linux下进程的环境变量

AH-3f7440:/tmp/root# ps | grep dhcpc 9528 root 47976 S /opt/ah/bin/dhcpc10595 root 2796 S grep dhcpcAH-3f7440:/tmp/root# tr '\0' '\n' < /proc/9528/environUSER=rootLD_LIBRARY_PATH=/l

2017-06-22 15:37:55 4710

原创 Libevent学习-------定时器事件

定时器事件的创建Libevent 一般调用evtimer_new来定义一个定时器事件#define evtimer_new(b, cb, arg) event_new((b), -1, 0, (cb), (arg))从宏定义来看,这个事件和io、signal事件的区别在于fd项为-1,表示并不关注, 并且events项为0, 并不是想象中的EV_TIMEOUT. evtimer_ne

2017-06-14 17:58:54 8269

原创 Libevent学习----信号事件

信号是一种异步事件:信号处理函数和程序的主循环是两条不同的执行路线。很明显,信号处理函数需要尽可能快地执行完毕,以确保该信号不被屏蔽太久(信号在处理期间,系统不会再次触发它)。 上面这幅图是网上找到的,很好地从整体上表述了原理,摘抄到最前面 下图是本人自己总结的信号事件代码级原理图 下面是展开分析代码实现一、初始化信号事件 调用base->evbase = base->evsel->

2017-06-09 16:00:34 996

原创 Libevent 学习--------(eventop)事件多路分发器

一、事件多路分发器一般使用I/O复用接口。 Libvent中使用eventop 结构作为后端I/O复用的统一接口/** Structure to define the backend of a given event_base. */struct eventop {

2017-06-07 16:03:53 1920

原创 Libevent学习-----Reactor的事件处理机制

1.      普通函数的调用机制:       主程序调用某函数à函数执行,保存入参和返回寄存器地址,主程序等待à 函数处理完将结果和控制权返回给主程序 à主程序继续执行void func (){ return;}int main(int argc, char *argv[]){ int a,b;

2017-06-06 16:18:16 437

原创 libevent 学习----------尾队列 tail queue

libevent里面的尾队列TAILQ 一、TAILQ的队列头 TAILQ把整个队列头单独抽象为一个结构体TAILQ_HEAD,如下:#ifndef TAILQ_HEAD#define TAILQ_HEAD(name, type) \struct name {

2017-05-22 15:17:17 1538 1

转载 我读过的最好的epoll讲解--转自”知乎“

作者:蓝形参,Geek 伪技术宅 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。    不管是文件,还是套接字,还是管道,我们都可以把他们看作流。    之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客

2016-11-25 15:39:01 359

转载 Linux软连接和硬链接

原文链接 http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在

2016-08-03 14:40:26 414

转载 KMP 算法 ---经典

The Knuth-Morris-Pratt Algorithm in my own words(http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html)For the past few days, I’ve been reading v

2016-07-15 17:38:56 381

原创 数组中超过一半的数字

题目:数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过了数组长度的一半,因此输出2.#include #include int check_more_than_one_half(int array[],int len,int value){ int i; in

2016-07-11 16:07:57 347

原创 快速排序中的partition算法

简介partition算法用途是:有一个数组array[]和其中任意一个数组元素x,修改数组,将数组中小于x的元素都移到x的左边,将大于x的元素都移动x的右边返回值: 返回值为最终x在数组中的索引值。void swap(int *x, int *y){ int tmp; tmp = *x; *x = *y; *y = tmp;}int partition(int arr

2016-07-11 14:46:25 1005

原创 snort -------DEBUG_WRAP

在看snort源码的时候,经常看到调用DEBUG_WRAP函数输出的debug信息。研究了一下怎么打开这个debug开关,以下是具体的步骤1. 在configure 选项中添加--enable-debug-msgs 和--enable-debug ,这个打开了宏DEBUG_MSGS2.定义环境变量SNORT_DEBUG和SNORT_PP_DEBUG, debug_level = $SNOR

2016-07-01 15:55:40 940

原创 查看linux系统发行版信息

[root@localhost ~]# cat /etc/issueCentOS release 6.4 (Final)Kernel \r on an \m

2016-06-28 17:10:55 350

原创 CPU个数和核数的判断依据

一直听说多核,多cpu,但是一直没有具体明白怎么查看一台linux机器的这些信息。前段时间终于抽空学习了一下CPU个数和核数的判断依据: 1. physical id 个数为物理CPU的个数2. core id 个数为核数3. 逻辑CPU# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的

2016-06-28 17:06:05 2543

原创 centos安装snort

1. 安装libpcap与libpcap-devel    yum install libpacp*2. 安装libpcre    yum install pcre*3. 安装libnet    下载libnet (http://libdnet.sourceforge.net/)    wget http://prdownloads.sourceforge.net/

2016-06-16 17:01:27 3723

《Snort 入侵检测系统源码分析》

《Snort 入侵检测系统源码分析》--独孤九贱

2017-07-05

23种设计模式(C++)

23种设计模式(C++)

2017-07-04

TCP/IP 详解2

TCP/IP 详解2

2017-06-06

UNIX网络编程_卷2_进程间通信

unix 网络编程 卷2 进程间通信,是第二版

2014-12-15

空空如也

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

TA关注的人

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