自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 资源 (4)
  • 收藏
  • 关注

原创 C++ 类成员变量为引用时如何编写

C++的成员变量可以为引用吗?答案:是的!代码如下:#include using namespace std;class A{public: A(int s):_k(s){cout << "A constructor" << endl;} ~A(){cout << "A destructor" << endl;} void print(){cout <<

2015-11-25 20:57:23 690

转载 网络数据包捕获函数库Libpcap安装与使用

1.Libpcap简介  Libpcap是Packet Capture Libray的英文缩写,即数据包捕获函数库。该库提供的C函数接口用于捕捉经过指定网络接口的数据包,该接口应该是被设为混杂模式。这个在原始套接子中有提到。  著名的软件TCPDUMP就是在Libpcap的基础上开发而成的。Libpcap提供的接口函数实现和封装了与数据包截获有关的过程。  Libpcap提

2015-07-12 21:40:43 4127

转载 libevent(一) socket属性设置与初始化操作

socket属性设置与初始化操作libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。

2015-07-12 19:44:11 1816

转载 libevent(二)libevent 接收TCP连接

libevent 接收TCP连接Evconnlistener 机制为您提供了侦听和接受传入的 TCP 连接的方法。下面的函数全部包含在``中。evconnlistener创建监听对象struct evconnlistener *evconnlistener_new(struct event_base *base,evconnlistener_cb cb, void

2015-07-12 19:37:37 1853

转载 libevent(三)事件注册与循环监听

事件注册与循环监听在libevent中为了监听某种事件的发生,设置事件触发后的回调函数,也就是说对该事件注册到当前的IO模型中。事件注册事件初始化使用`event_new`函数来对事件进行初始化。typedef void (*event_callback_fn)(evutil_socket_t, short, void *);/* 回调函数 */stru

2015-07-12 19:17:30 838

转载 Linux 的五个查找命令

Linux的五个查找命令在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。1. findfind是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。find的使用格式如下:  $ find   - : 所要搜索的

2015-07-03 13:14:13 519

转载 小端字节序与大端字节序

小端字节序与大端字节序端模式分为:小端字节序和大端字节序,也就是字节在内存中的顺序。 小端字节序:低字节存于内存低地址;高字节存于内存高地址。如一个long型数据0x12345678        0x0029f458  0x78        0x0029f459  0x56        0x0029f45a  0x34        0x0029f45b  0

2015-06-25 18:00:40 563

转载 关于类成员函数中访问同类对象的私有成员

关于类成员函数中访问同类对象的私有成员,主要包含以下几种场景:a. 在C++的类的成员函数中,允许直接访问该类的对象的私有成员变量。b. 在类的成员函数中可以访问同类型实例的私有变量。c. 拷贝构造函数里,可以直接访问另外一个同类对象(引用)的私有成员。d. 类的成员函数可以直接访问作为其参数的同类型对象的私有成员。举例描述上述知识:1).在拷贝构造

2015-06-24 22:17:03 2552 1

转载 链路层链路发现协议(LLDP)讲解

一、LLDP协议概述 随着网络技术的发展,接入网络的设备的种类越来越多,配置越来越复杂,来自不同设备厂商的设备也往往会增加自己特有的功能,这就导致在一个网络中往往会有很多具有不同特性的、来自不同厂商的设备,为了方便对这样的网络进行管理,就需要使得不同厂商的设备能够在网络中相互发现并交互各自的系统及配置信息。 LLDP(Link Layer Discovery Protocol,链路层发现协

2015-06-24 10:59:11 50703 3

原创 C++ 成员函数返回引用,三种获取返回值的效果

这个实验需要以下的代码:class Test{public: Test(){cout << "Test" << endl;} ~Test(){cout << "~Test" << endl;} Test(const Test &right) { cout << "Test(const)" << endl; this->a =

2015-06-22 23:48:04 3678

翻译 OpenFlow Switch Specification 1.3.0 (三)

六、OpenFlow 安全通道(OpenFlow Channel)         OpenFlow 通道是连接每一个交换到控制器的接口。通过这个接口,控制器配置和管理交换机,从交换机接收事件,向交换机发送数据包。        在数据层与 OpenFlow 通道之间,接口是特定实现的,然而 OpenFlow 通道消息(channel messages)必须被 OpenFl

2015-06-16 11:20:26 4116

翻译 OpenFlow Switch Specification 1.3.0 (二)

五、OpenFlow 表        这一部分描述了构成流表和组表的组件,同时也包括了流表“匹配”的机制和“动作”处理。5.1 管线处理流程        服从OpenFlow协议的交换机可以分为两大类:一类是 OpenFlow-only 的,另一类的 OpenFlow-hybrid。 OpenFlow-only交换机只支持 OpenFlow 操作,在

2015-06-16 11:04:32 3731

翻译 OpenFlow Switch Specification 1.3.0 (一)

一、 介绍        这个文档描述了 OpenFlow 交换机的设计需求。我们建议你在阅读此文档之前,先阅读《OpenFlow 白皮书》。《OpenFlow 白皮书》可以通过 Open Networking Foundation website(https://www.opennetworking.org/standards/open-flow)获得。这个说明文档涵盖的内容有:

2015-06-16 10:55:41 3023 2

原创 (八)SDN 控制器 NOX 源码分析之—— deployer

部署器包含待部署组件的context,需要的时候可以通过部署器传递给kernel。NOX支持多个部署器,其中可以有动态部署器和静态部署器以及加载Python部件的部署器。构造函数:没有显式定义接口:bool Deployer::deploy(Kernel* kernel, const Component_name& name)将部署器中包含的Component安装,通过调用此方法更

2015-06-15 13:58:50 702

原创 (七)SDN 控制器 NOX 源码分析之—— static-deployer

Static_component_context是专门为静态组件生成component context而设计的。Static_component_context功能主要是为component提供一个“工厂”以及回调函数构造函数:Static_component_context::Static_component_context(    const Constructor_cal

2015-06-15 13:54:23 624

原创 (六)SDN 控制器 NOX 源码分析之—— Kernel

Kernel是用来管理所有组件的,它可以处理组件间的依赖关系,并且记录组件的安装,以供依赖需要,所以它是全局组件的container接口:Kernel::init(info_file, argc, argv)初始化核心Kernel :: get_instance()Kernel是单例模式,全局只有一个对象存在,通过这个函数取得对象void Kernel :: attach_

2015-06-15 13:51:03 830

原创 (五)SDN 控制器 NOX 源码分析之—— Connection_manager

首先这个组件是用来管理网络连接的,在我们使用NOX时,常用的命令就是 “-i ptcp:127.0.0.1:6633”,也即是传到此模块中构造函数中的变量“interface”是“-i ptcp:127.0.0.1:6633”构造函数:Connection_manager::Connection_manager(const Component_context* ctxt, const st

2015-06-15 13:46:04 775

原创 (四)SDN 控制器 NOX 源码分析之—— DSO-deployer

DSO_component_context组件的上下文类,保存组件的运行状态及组件的实例构造函数:DSO_component_context::DSO_component_context(const Component_name& name, const std::string& config_path)构造函数初始化组件的状态与状态对应触发的事件句柄;并将依赖组件列表初始化到【d

2015-06-15 13:43:22 757

原创 (三)SDN 控制器 NOX 源码分析之—— Event_dispatcher

event-dispatcher.hhtypedef boost::function Callback回调函数的类型定义static Component* instantiate(const Component_context*, size_t n_threads);生成一个Event-dispatcher对象void post(const Event&);立刻发送一个事件

2015-06-15 13:39:07 661

原创 (二)SDN 控制器 NOX 源码分析之—— Component

Component_context1.构造函数:Component_context(const Component_name& name, const std::string& config_path);Component_context对象保存着组件的注册信息,通过“组件名和组件的配置文件”这两个参数来初始化对象注册信息保存在Component_context :: properti

2015-06-15 13:33:39 683

原创 (一)SDN 控制器 NOX 源码分析之—— nox_main.cc

nox_main.ccApplication_list parse_application_list(int optind, int argc, char** argv) 从NOX启动命令行中获得启动程序的名字以及所带参数,返回(程序名,参数)的列表void hello(const char* program_name)打印NOX版本信息以及编译事件void usage(c

2015-06-15 13:25:05 1709

原创 C++对象析构函数解析示例

一、基类析构函数为虚函数#include using namespace std;class Point{public: Point(){ cout << "Point()" << endl; } virtual ~Point(){ cout << "~Point()" << endl; }};class Po

2015-06-05 20:16:42 782

转载 bzero, memset ,setmem 区别

bzero  原型: extern void bzero(void *s, int n);用法: #include     功能:置字节字符串s的前n个字节为零。    说明:bzero无返回值。    举例:       // bzero.c                   #include        #include        i

2015-05-27 13:17:22 926

原创 C++ 成员函数 const 重载

众所周知,C++类实现函数重载有两种情况:函数参数的类型不同,参数的个数不同。而与函数的返回值没有什么关系。还有一种类成员函数重载,它并不要求函数的参数类型不同。下面给出例子:#include using namespace std;class A{public: A(int a):_a(a){} void print()const//函数体中不能修改数据成员对象,否

2015-05-18 21:24:08 1522

转载 解决头文件相互包含问题的方法

目录(?)[+]        所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。               一般情况下,C/C++要求所有的类型必须在使用前被定义,但是在一些特殊情况下,这种要求无法满足,例如,在类CMyView中保留了一个非模式对话框对象指针,该对象用于显示/修改一些信息。为了实现对话框"应用"按钮,把对话框做的修改立刻更新到v

2015-05-16 17:51:28 432

转载 C++中const、volatile、mutable的用法

const、volatile、mutable的用法const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value值不可变。 例如:const

2015-04-15 23:21:43 362

转载 慎用局部静态变量

慎用局部静态变量先看看例子吧:////////////////////////////////////////////////////////////// SomeClass.hclass SomeClass {public:    static string &func1(void) {        static string s1;

2015-04-03 13:08:27 936

原创 网上Qt多线程同步的一种普遍误识

Youtube上有一个很出名的Qt视频教程,讲得简练精要。但是在他讲到的Qt线程同步一集的时候,我凭着自己的经验,感觉他讲得是错的。于是在网上大范围的搜索“qt线程同步”这个关键字,试图找到一些线索,以证明视频教程中的错误。但是看了很多个博客之后,我发现大家都是千篇一律,很是吃惊。真是误导大家。所以特意写这篇文章来证实一下。 首先我们要知道为什么要用线程同步?那是因为在多线程编程里面,会有一些

2015-04-03 10:09:14 1298 1

转载 C++类静态成员的初始化

记住:通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或是枚举型const,则可以在类声明中初始化!!!#includeiostream>usingnamespacestd;classtest{public:staticint num;};inttest::num =

2015-04-03 09:40:42 486

转载 Qt 常用命令,宏,pro文件格式

1.qmake 常用命令:   qmake -project //生成pro文件,自动检查c/c++程序文件 qmake -t lib //生产把源码编译成库的pro工程文件   qmake -tp vc //根据pro文件生成vc的工程2.Qt常用宏:3.Qt pro 文件格式:

2015-03-28 10:03:44 2772

翻译 ONF组织的SDN架构文档——实施注意事项(四)

6 实施注意事项本章所将的东西不同指导现存的应用,提出了一些准则来评估现存的应用,以及在评估中要注意的方面。文章也定义了现在正进行核将要做的一些工作。6.1安全由于SDN固有的特性和实现,SDN的安全需求可能不同于传统的网络。由于它物理应用的原因,集中控制可能把一个单一高价值的资产暴露给攻击者,这和在分布式控制域中的自治的资产不同。因为逻辑上集中控制器虽然看起来像是以分布式的方

2015-03-26 01:37:07 1105

翻译 ONF组织的SDN架构文档——四个架构(三/二)

5.3提供虚拟网络,非递归式的SDN提供商在第5.2章节,每一个NE都有一个相关的客户agent。它包含着从自身NE中虚拟出来的虚拟资源。概念上的资源是跨度多个物理NEs的,由SDN控制器对其进行扩展。这个章节与5.2章节的主要不同是:这一章节的控制器client可以约定跨越多个物理NEs的虚拟资源;这样,资源在控制器server中是可扩展的。提供商通过在SDN控制器server中定位客户环境

2015-03-26 01:30:33 2521

翻译 ONF组织的SDN架构文档——四个架构(三/一)

5 控制功能和交互行为在协调(coordination)功能的辅助下,控制(control)功能是SDN的核心。集中讨论这些内容,同样也是以迭代的方式,这部分另外增加了详细的层次,来介绍了4单元所引入的原则和组件。总结协调(管理)功能和控制功能的区别如下:*协调功能执行与向客户分配资源相关的功能,以及根据策略界定这些资源。这些功能出现在单个信任域中。*当一个资源被分配到客户,资源就有效

2015-03-26 01:22:30 2291

翻译 ONF组织的SDN架构文档——原理与架构构件(二/二)

4.4应用层图4.4扩展了图3.3中SDN架构里的SDN application块。SDN原则允许应用在业务和策略允许的前提下指定需要的网络资源和行为。从SDN到应用程序层的接口叫做A-CPI。图4.9显示SDN应用自身就可以支持A-CPI代理,用来为其他应用层次提供查询功能,这将在4.1部分中介绍。应用层中不同层次的应用,根据器所处的层次高低会有不同程度的抽象。注:SDN社区经常把A

2015-03-26 01:02:54 3316

翻译 ONF组织的SDN架构文档——原理与架构构件(二/一)

4原理和架构构件这节介绍SDN原理,形成SDN架构的功能实体和组织关系,随后详细介绍。 4.1原理ONF从一个较高的视角对SDN进行介绍[1],一些基本的SDN原理在其中有引证,他们的应用在此有简略的总结,在后续章节中有更详细的介绍。*控制器和数据层的分离原理这个原理要求控制层和数据层可分割,但是也要知道,控制依然能在数据层中被执行。在SDN控制层和NE之间的D-CPI通过

2015-03-26 00:37:53 3408

翻译 ONF组织的SDN架构文档——概述(一)

1.适用范围        这个文档描述了SDN架构。文档的目的是为ONF工作组未来的工作做详细指导和说明,同时也可以作为ONF对外交流的一个参考文档。它的姊妹文档(框架文档)描述了ONF想要达到的设计目标。此文档只是从一个较高的角度描述了达到此目标的一些方法。       SDN架构从一个较高的角度出发,给控制器指定了参考点和接口。架构描述了大量SDN控制器和NE(network e

2015-03-26 00:13:56 8019

转载 查看进程占用系统资源的方法

用ps命令查看进程的内存 ps命令是Linux下常见的查看进程状况的程序,它有几个字段可以用来查看 进程内存使用情况:sz,rss,vsz。分别说明如下:sz:进程映像所占用的物理页面数量,也就是以物理页面为单位表示的虚拟内存大小; rss:进程当前所占用的物理内存大小,单位为kB; vsz:进程的虚拟内存大小,单位为kB,它等于sz乘于物理页面大小(x86平台通常为4kB)。假如我要查看程序

2015-03-23 13:44:06 1097

原创 GPS坐标转百度地图坐标的方法

首先需要认识一下GPS的坐标系。GPS坐标系遵循WGS-84标准,在这个标准下,GPS芯片可以发出不同的数据包格式。根据其数据帧帧头的不同,GPS数据可以分类为GPGGA、GPGSA、GPGSV、GPRMC等。这些帧头标识了后续帧内数据的组成结构。通常情况下,我们所关心的定位数据如经纬度、速度、时间等均可以从GPRMC帧中获取得到。在次我不讲解具体的帧的格式,在网上可以很容易搜到,也可以总芯片

2015-03-20 19:30:58 18088 1

原创 C++对象特殊初始化及赋值

在阅读一些C++源码的时候,我们会发现给对象初始化或赋值时用有类似“ClassA a = {1,2}”或“a = {1,2}(a是对象)”的语句。这种初始化以及赋值的表达形式让人产生疑惑:首先,它是如何给对象赋值的;其次,这种表达是不是需要ClassA有特殊的实现。这些都令人疑惑。   网络上有人把这种赋值形式解释为ClassA类重载了赋值操作符。但是真实情况并非如此。

2015-03-03 15:19:46 1235

转载 C++自定义隐式转换函数

转载自:http://www.cnblogs.com/younes/archive/2010/03/08/1681115.html C++中单参数构造函数若不声明为explict,在合适的场合可以产生隐式转换:由成员变量类型转换为类类型。  下面的代码展示如何实现反向的转换: void changeFontSize(FontHandle f, int newsize);class Font{p

2015-03-02 19:50:50 1437

C++日志系统源代码(linux)

此源码从一个开源项目nox中提取。其中有一份使用说明,包含了接口使用以及代码结构分析;此模块的接口使用方便,通过调用可以轻松管理应用中不同模块发出的日志消息、向socket中发送日志消息的功能。最后,要强调一点,这个模块依赖boost库

2014-11-13

json解析器源码

一个C++编写的json解析器,源码来自一个开源项目。另外要,此解析器需要boost库的支持

2014-11-11

Autoconf, Automake, and Libtool(电子书原版).pdf

Autoconf, Automake and Libtool are packages for making your software more portable and to simplify building it—usually on someone else’s system. Software portability and effective build systems are crucial aspects of modern software engineering practice. It is unlikely that a software project would be started today with the expectation that the software would run on only one platform. Hardware constraints may change the choice of platform, new customers with different kinds of systems may emerge or your vendor might introduce incompatible changes in newer versions of their operating system. In addition, tools that make building software easier and less error prone are valuable. Autoconf is a tool that makes your packages more portable by performing tests to discover system characteristics before the package is compiled. Your source code can then adapt to these differences. Automake is a tool for generating ‘Makefile’s—descriptions of what to build—that conform to a number of standards. Automake substantially simplifies the process of describing the organization of a package and performs additional functions such as dependency tracking between source files. Libtool is a command line interface to the compiler and linker that makes it easy to portably generate static and shared libraries, regardless of the platform it is running on.

2014-10-28

vim配置文件(vim7.3)

将这个文件中的内容粘贴到linux用户目录下,将其改名为“.vimrc”就可以使vim变得方便好用

2014-10-25

空空如也

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

TA关注的人

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