版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、这是篇描述snmp+ 的文档。面向对象的snmp+ 是一套专注于网络管理的开放技术,是 snmp 协议原理和c+(结合的产物) 。 该文档描述了各种各样可移植的c+类 (class) ,正是这些 c+类构建了snmp+ 。(同时包含的)还有这些类的相关的许多例子。(您可以)登录http:/ ,下载 snmp+ 的源码,和一些正在实际中使用的例子,以及其他相关文档。1.介绍(目前)有许多可以创建网络管理应用的snmp 的 api 。大多数 api 都提供了一个很大的函数库,(调用)这些函数的程序员需要熟悉snmp 内部的工作原理和它的资源管理(机制)。这些api 大多都是平台相关的,导致了snm
2、p 的代码成了操作系统相关的或者网络系统平台有关的,难以移植。(另一方面)由于c+有丰富的、可复用的标准类库,用c+开发应用成了目前的主流,(然而)c+标准类库所缺少的正是一套封装好的处理网络管理的类。(如果)基于面向对象的方法来进行snmp 网络编程,可以提供诸多好处:易用、安全、可移植、能扩展。(因此) snmp+ 灵活有效的解决了其他类似api 执行和管理起来都很痛苦的问题。1.1.什么是 snmp+snmp+ 是一套 c+类的集合,它为网络管理应用的开发者提供了snmp 服务。 snmp+并非是现有的snmp 引擎的扩充或者封装。(事实上)为了效率和方便移植,它只用到了现有的snmp
3、库里面极少的一部分。snmp+ 也不是要取代其他已有的snmp api,比如 winsnmp 。snmp+ (只是)通过 提供强大灵活的功能,降低管理和执行的复杂性,把面向对象的优点带到了网络编程中。1.2.snmp+ 的本质1.2.1.简单易用的snmp+面向对象的snmp 编程应该是简单易用的。毕竟,snmp 原意就是 “ 简单网络管理协议” ,snmp+(只是) 将简单还给snmp!应用的开发者不需要关心snmp 的底层实现机制,因为面向对象的方法已经将snmp 内部机制封装、并隐藏好了。snmp+ 的简单易用表现在以下方面:.为 snmp 提供了简单易用的接口使用 snm
4、p+ 不需要精通snmp,甚至不需要精通c+!因为 snmp+ 里面几乎没有c 的指针,所以可以简单的通过api 直接使用。.可以方便的迁移至snmpv2snmp+ 的主要目标之一就是开发一套api,(使得)迁移至snmpv2(的过程中)尽可能少地影响现有代码。snmptarget class(译注:后面将要讲到)使之成为了可能。.保留了对snmp 灵活的底层开发这是为了方便那些不希望使用面向对象方法,而直接编写snmp 的底层机制的用户。虽然 snmp+ 快速而方便,但是有些时候程序员也许希望直接使用底层的snmp api。.鼓励程序员用功能强大的c
5、+,不要因学得不够快而去指责它使用 snmp+ 的用户不需要精通c+。基本的 snmp 的知识是必要的,但是实际上也需要对 c+初步的理解。1.2.2.编程安全的snmp+大多数 snmp api 需要程序员去管理大量的资源。不恰当的装载或卸载这些资源,会导致内存崩溃或泄漏。snmp+ 提供的安全机制,(可以)实现对这些资源的自动管理。snmp+ 的用户(可以)体验到自动管理资源与对话所带来的好处。snmp+ 在编程上的安全突出表现在下面的领域:.为 snmp 资源提供安全的管理为面向对象的方法已经将snmp 内部机制封装、并隐藏好了。snmp+ 的简单易用表现在以下方面:1.2
6、.1.1.为 snmp 提供了简单易用的接口使用 snmp+ 不需要精通snmp,甚至不需要精通c+!因为 snmp+ 里面几乎没有c 的指针,所以可以简单的通过api 直接使用。.可以方便的迁移至snmpv2snmp+ 的主要目标之一就是开发一套api,(使得)迁移至snmpv2(的过程中)尽可能少地影响现有代码。snmptarget class(译注:后面将要讲到)使之成为了可能。.保留了对snmp 灵活的底层开发这是为了方便那些不希望使用面向对象方法,而直接编写snmp 的底层机制的用户。虽然 snmp+ 快速而方便,但是有些时候程序员也许希望直接使用底层的s
7、nmp api。.鼓励程序员用功能强大的c+,不要因学得不够快而去指责它使用 snmp+ 的用户不需要精通c+。基本的 snmp 的知识是必要的,但是实际上也需要对 c+初步的理解。1.2.2.编程安全的snmp+大多数 snmp api 需要程序员去管理大量的资源。不恰当的装载或卸载这些资源,会导致内存崩溃或泄漏。snmp+ 提供的安全机制,(可以)实现对这些资源的自动管理。snmp+ 的用户(可以)体验到自动管理资源与对话所带来的好处。snmp+ 在编程上的安全突出表现在下面的领域:.为 snmp 资源提供安全的管理为面向对象的方法已经将snmp 内部机制封装、
8、并隐藏好了。snmp+ 的简单易用表现在以下方面:.为 snmp 提供了简单易用的接口使用 snmp+ 不需要精通snmp,甚至不需要精通c+!因为 snmp+ 里面几乎没有c 的指针,所以可以简单的通过api 直接使用。.可以方便的迁移至snmpv2snmp+ 的主要目标之一就是开发一套api,(使得)迁移至snmpv2(的过程中)尽可能少地影响现有代码。snmptarget class(译注:后面将要讲到)使之成为了可能。.保留了对snmp 灵活的底层开发这是为了方便那些不希望使用面向对象方法,而直接编写snmp 的底层机制的用户。虽然 snmp+
9、 快速而方便,但是有些时候程序员也许希望直接使用底层的snmp api。.鼓励程序员用功能强大的c+,不要因学得不够快而去指责它使用 snmp+ 的用户不需要精通c+。基本的 snmp 的知识是必要的,但是实际上也需要对 c+初步的理解。1.2.2.编程安全的snmp+大多数 snmp api 需要程序员去管理大量的资源。不恰当的装载或卸载这些资源,会导致内存崩溃或泄漏。snmp+ 提供的安全机制,(可以)实现对这些资源的自动管理。snmp+ 的用户(可以)体验到自动管理资源与对话所带来的好处。snmp+ 在编程上的安全突出表现在下面的领域:.为 snmp 资源提供
10、安全的管理/- construct a snmp+ snmp object -snmp snmp( status); / create a snmp+ sessionif ( status != snmp_class_success) / checkcreation statuscout snmp.error_msg( status);/ if fail, print error stringreturn;/- invoke a snmp+ get -pdu += vb;/add the variable binding to the pduif (status = snmp.get(pdu,
11、 ctarget) != snmp_class_success)cout snmp.error_msg( status);else pdu.get_vb( vb,0);/ extract the variable binding from pducout “ system descriptor = ” vb.get_printable_value(); / print out the value;/ thats all!真正属于snmp+的语句就 10行代码。 (首先) 用代理端的ip 地址建立一个ctarget对象;(然后)用mib对象所定位的系统描述符创建一个变量绑定(vb );(接着就把
12、)这个 vb 纳入一个pdu对象;(最后生成) 一个 snmp对象来执行snmp的 get操作。一旦找到了 ( 所需的数据 ) ,( 对应的 ) 应答消息就被打印出来。(并且)所有的错误处理代码也都包含了。3.snmp+特性3.1.完整的一套snmp c+类snmp+是以一套c+ 类作为基石的。这些类是:对象描述符(oid )类、变量绑定(vb)类、协议数据单元(pdu )类、 snmp类。并且,其他各种用抽象语法表示(asn.1 )来描述的管理信息结构(smi ),也被抽象成了简单的、面向对象的类型。3.2.snmp内存的自动管理当 snmp+的对象被实例化或销毁的时候, 其相关的类可以自动
13、管理着各种各样的snmp结构和资源。 这就使得应用的开发者不用再担心数据结构和资源的卸载,不然就得为防止内存的崩溃或者泄漏提供有效的保护措施。snmp+的对象的实例化可以是静态的,也可以是动态的。静态的实例化可以在对象脱离它的作用域时卸载掉;动态分配则需要使用c+的 new 和 delete 。在 snmp+内部,有许多被隐藏和保护在公用接口后面的smi 结构。所有的 smi 结构都是在内部管理的,程序员不需要定义或管理smi 的结构和它的值。因为在 snmp+内绝大部分地方是不存在c 的指针的。3.3.简单易用的由于隐藏并管理了所有smi 结构和它们的值,snmp+的类使用起来即简单又安全。
14、外部程序员无法破坏到隐藏和保护在作用域后面的东东。3.4.强大灵活的snmp+提供了强大灵活的功能,降低了管理和执行的复杂性。每个snmp+对象都通过建立一个会话来和一个代理端联系。即由一个snmp+的对话类的实例,就能处理所有与特定代理端的连接。另外自动重发和超时控制的机制,为每个snmp+对象都带来了可靠性。一个应用可能会包含许多snmp+的对象的实例,每个实例都可能与相同或不同的代理端通话。 有了这个功能强大的特性,网络管理程序就可以为每个管理单元建立起不同的会话。另一方面,就算单一的snmp 会话也可以解决问题。例如:一个应用可以通过一个snmp+对象来处理图形统计,另一个snmp+对
15、象监控 trap ,也许还有第三个snmp+ 对象用以浏览snmp 。 snmp+自动并行处理了同一时刻来自不同snmp+实例的请求。3.5.可移植对象的snmp+的主体是可以移植的c+ 代码。其中只有snmp class 的实现与不同的目标操作系统有关。如果你的程序中包含了snmp+的代码,那么导出这部分代码的时候,就可以不做任何修改。3.6.自动超时和重发机制snmp+提供了自动超时和重发机制,程序员不用去实现超时或重发机制的代码。重发机制是在 snmptarget class 里面定义的, 这就使得每一个目标(target )都具有了它自己的超时 /重发机制。3.7.阻塞模式snmp+提
16、供了阻塞方式。ms-windows上的阻塞方式可以并发的阻塞从每个snmp 类的实例发出的请求。3.8.异步的非阻塞模式snmp+还为应答提供了异步的非阻塞的方式。超时和重发机制同时支持阻塞和异步两种模式。3.9.notification、trap的收发snmp+允许在多种传输层上(包括ip 和 ipx )收发 trap 。而且 snmp+还允许使用非标准的ip 端口和 ipx 套接口来收发trap 。3.10.通过双效的api支持 snmpv1和 snmpv2snmp+的设计可同时支持snmpv1和 snmpv2的使用。所有 api 的操作都被设计成了双效的,也即操作是snmp 版本无关的。
17、通过使用snmptarget类,与 snmp 的版本相关的操作被抽象出来了。3.11.支持 snmp的 get, get next, get bulk, set, inform和 trap的操作snmp+完整的支持snmp 的 6 种操作。这 6 个 snmp+的成员函数使用相同的参数表,也都支持阻塞和非阻塞(异步)方式。3.12.通过继承实现重定义snmp+是用 c+ 实现的,所以允许程序员重载或重定义那些不适合他们的操作。举个例子:如果一个应用需要特定的oid 对象,那就需要建立一个oid class 的子类,用以继承所有 oid 类的属性和操作,同时在派生类种加入新的属性和操作。4.在
18、microsoft windows 系列操作系统上使用snmp+snmp+已经在 ms-windows 3.1, ms-windows for work groups 3.11, ms-windows nt 3.51, and ms- windows ?95 上实现了。4.1.winsnmp version 1.1的使用在 ms-windows上可以用winsnmp version 1.1 来运行 snmp+。这就使得其他用winsnmp代码直接写的snmp 应用可以与snmp+的应用兼容。 注意, 目前 hp 的 ms-windows设备使用winsnmp ,其他设备不需要使用winsnmp
19、来进行 ans.1的编码和解码。但那些没有使用winsnmp的设备也需要与winsnmp的应用兼容,才能和snmp+ 的应用兼容。4.2.对 ip 和 ipx的支持可以通过一个winsock compliant stack ,来实现对ip 的操作。 同时为了在ipx 协议上运行,还需要兼容novell网络的客户程序和驱动。目前snmp+已经通过了在广泛多样的协议栈下的运行测试,这些协议栈包括:ftp,netmanage,lanworkplace,ms-wfwg 3.11 ,以及 windows nt 。4.3.对 notification、trap收发的支持snmp+ 包含了对winsnmp
20、trap机制的支持。这同时包括了trap的发送和收取。在接收 trap的时候,还提供了过滤trap的功能。4.4.与 hp openview for windows 兼容已经有大量使用snmp+创建的应用,实现了hp openview for windows的兼容。5.在 unix上使用 snmp+5.1.统一的类的接口用在 unix设备上的snmp+类的接口和ms-windows是一样的。5.2.windows到 unix的仿真与移植通过编译、连接对应的snmp+类, snmp+就可以实现在unix上运行。 snmp+/unix的设计决定了它可以同时运行在原始的unix字符模式、 x-win
21、dow模式,或者windows-to-unix的仿真工具上。5.3.与 hp openview for unix 兼容已经有大量使用snmp+创建的应用,实现了与hp openview for unix的兼容。6.snmp syntax classessnmp+之 snmp syntax的对象模型(object modeling technique)视图snmp+的 snmp syntax classe描绘了一个具有c+ 面向对象风格的视图。即用于描述 snmp 的 smi 之 asn.1的数据类型视图。 它包含了映射到对应的smi 类型的一组类的集合。而且为了方便使用,还引入了一些非smi
22、的类。 snmp+为这些 snmp 数据类型提供了强大、简单易用的接口。下表概要地描述了各种snmp+ syntax classes :snmp+ syntax class nameclass descriptionsmi or asn.1 counter partsnmpsyntaxparent of all syntax classes.no asn.1 counter part, used for oo structure.oidobject identifier class.asn.1 object identifier.octectstroctet string class.asn.
23、1 octet string.uint32unsigned 32 bit integer class.smi unsigned 32 bit integer.timetickstimeticks class.smi time ticks.counter3232 bit counter class.smi 32 bit counter.gauge3232 bit gauge class.smi 32 bit gauge.int32signed 32 bit integer.smi 32 bit signed integer.counter6464 bit counter class.smi 64
24、 bit counter.addressabstract address class.no asn.1 counter part used for oo structure.ipaddressip address class.smi ip address.udpaddressudpaddress classsmi ip address with port specification.ipxaddressipx address class.no asn.1 or smi counter partipxsockaddressipx address class with socket number.
25、no asn.1 or smi counter partmacaddressmac address class.smi counter partgenaddressgeneric addressno asn.1 or smi counter part.7.object id classsnmp+之 oid class的对象模型(object modeling technique)视图7.1.对象标识符类对象标识符类(oid )封装了smi 的对象标识。信息管理库(mib )中所定义的smi 的对象是一种在mib 中找到的数据元素的数据标识。与smi oid 相关的结构和函数,自然都是面向对象的
26、。 事实上 oid class 与 c+ 的 string class 有许多共同之处。 如果你熟悉c+ 的 string class 或者 mfc 的 cstring class ,那么你就会感觉oid class 用起来很亲切、简单。 oid class 被设计成了快速有效的类;它可以定义和操作对象标识;不依赖现有的 snmp api ,完全是可移植的;可以在任何ansi c+ 编译器上进行编译。7.2.oid class的成员函数列表oid class member functions 说明constructorsoid:oid( void);构造一个空的的oidoid:oid( con
27、st char *dotted_string);用带点的字符串构造新的oidoid:oid( const oid &oid);用已有的 oid 构造新的oidoid:oid( const unsigned long *data, int len);通过一个指针和长度来构造一个新的oiddestructoroid:oid( );销毁一个 oid ,释放所有的堆overloaded operators oid & operator = ( const char *dotted_string);将一个带点的字符串付给一个oidoid & operator = ( const
28、oid &oid);将一个 oid 付给另一个oidint operator = ( const oid &lhs, const oid& 判断两个 oid 是否相等rhs);int operator = ( const oid& lhs, const char*dotted_string);判断一个 oid 是否和一个带点的字符串相等int operator != ( const oid &lhs, const oid& rhs);判断两个 oid 是否不等int operator != ( const oid & lhs, const
29、 char *dotted_string);判断一个 oid 是否和一个带点的字符串不相等int operator ( const oid &lhs, const oid& rhs);判断一个 oid 是否比另一个小int operator ( const oid &lhs, const char *dotted_string);判断一个 oid 是否比一个带点的字符串小int operator =( const oid &lhs,const oid &rhs);判断一个 oid 是否 “ 小于等于 ” 另一个int operator ( const o
30、id &lhs, const oid &rhs);判断一个 oid 是否比另一个大int operator ( const oid &lhs, const char * dotted_string);判断一个 oid 是否比一个带点的字符串大int operator = ( const oid&lhs, const oid &rhs);判断一个 oid 是否 “ 大于等于 ” 另一个int operator = ( const oid &lhs, const char* dotted_string);判断一个 oid 是否 “ 大于等于 ” 一个
31、带点的字符串oid& operator += ( const char *dotted_string);将一个带点的字符串加到一个oid 后面oid& operator +=( const unsigned long i);将一个整数加到一个带点的oid 字符串后面oid& operator+=( const oid& oid);将一个 oid 加到另一个 oid 后面unsigned long &operator ( int position);访问 oid 的一个独立子单元output member functions char * get_prin
32、table( const unsigned int n);返回一个 oid 的 n 个带点格式的子单元char *get_printable( const unsigned long s, const unsigned long n);返回从 s 开始,以点号分割的n 个子单元char *get_printable();返回以点号分割的oid 字符串operator char *();同上miscellaneous member functions set_data (const unsigned long *data,const unsigned long n);用指针和长度来设置一个oid
33、unsigned long len( );返回 oid 中子单元的个数(长度)trim( const unsigned long n=1);删除 oid 最右边的 n 个子单元,默认删除1个ncompare( const unsigned long n, const oid& oid);从左至右比较oid 的前 n 个子单元rncompare( const unsigned long n, const oid& oid);从右至左比较oid 的后 n 个子单元int valid( );返回 oid 的有效性7.3.一些 oid class的例子下面的例子展示了oid class
34、 的不同用法。 oid class 不需要依赖其他库和模块。下列代码在 ansi/iso c+ 上编译通过#include “ oid.h”void oid_example()/ construct an oid with a dotted string and print it outoid o1(..9.1);cout “ o1= “ o1.get_printable ();/ construct an oid with another oid and print it outoid o2(o1);cout “ o2=” o2.get_printable();/
35、 trim o2?s last value and print it outo2.trim(1);cout “ o2=” o2.get_printable();/ add a 2 value to the end of o2 and print it out o2+=2;cout “ o2=” o2.get_printable();/ create a new oid, o3oid o3;/ assign o3 a value and print it outo3=..9.3;cout “ o3= ” o3.get_printable();/ create o4oi
36、d o4;/ assign o4 o1?s valueo4=o1;/ trim off o4 by 1 o4.trim(1);/ concat a 4 onto o4 and print it outo4+= ” .4 ”;cout “ o4= ” o4.get_printable();/ make o5 from o1 and print it outoid o5(o1);cout “ o5= ” o5.get_printable();/ compare two not equal oidsif (o1=o2)cout o1 equals o2;else cout o1 not equal
37、to o2; / print out a piece of o1cout strval(3) of o1 = “ o1.get_printable(3);/ print out a piece of o1cout strval(1,3) of o1 = “ o1.get_printable(1,3);/ set o1s last subid o1 o1.len()-1 = 49;cout o1 modified = “ o1.get_printable();/ set o1s 3rdsubido12=49;cout o1 modified = “ o1.get_printable();/ ge
38、t the last subid of 02cout last of o2 = “ o2o2.len()-1;/ get the 3rdsubid of 02cout 3rd of o2 = “ o22;/ ncompareif (o1.ncompare(3,o2)cout ncompare o1,o2,3 =;elsecout ncompare o1,o2,3 !=; / make an array of oidsoid oids30;int w;for ( w=0;w30;w+) oidsw = 300.301.302.303.304.305.306.307; oidsw += (w+1)
39、; for (w=0;w25;w+)sprintf( msg,oids%d = %s,w,oidsw.get_printable();printf(“ %s” ,msg, strlen(msg); 8.octetstr classsnmp+之 octetstr class的对象模型(object modeling technique)视图8.1.八位字节类通过 snmp+的 octet class ,可以简单且安全地操作smi 的 8 位字节。有了octet class ,就不需要通过内部指针和长度来操作8 位字节了。使用snmp+的 octet class 来实例化、操作、销毁一个8 位字节
40、对象是很简单的,不用担心如何管理内存以及内存是否会泄漏。与ansi c+ 的 string class 类似, octetstr class 可以通过多种方法构造8位字节,还可以对它们进行赋值操作,与其他snmp+ classes一起使用。8.2.octetstr class的成员函数列表octetstr class member functions 说明constructors octetstr:octetstr( void);构造一个空的octetstroctetstr:octetstr( const char* string);用一个没有结束符的字符串构造octetstroctetstr
41、:octetstr( const unsigned char *s, unsigned long int i);通过一个指针和长度来构造octetstroctetstr:octetstr( const octetstr &octet);用已有的 octetstr构造新的 octetstrdestructoroctetstr:octetstr( );销毁一个 octetstroverloaded operatorsoctetstr& operator = ( const char *string); 将一个没有结束符的字符串付给一个octetstroctetstr& op
42、erator = ( const octetstr& octet);将一个 octetstr付给另一个octetstrint operator = ( const octetstr &lhs, const octetstr &rhs);判断两个 octetstr对象是否相等int operator = ( const octetstr & lhs, const char *string); 判断 octetstr是否和一个 char*字符串相等int operator != ( const octetstr& lhs, const octetstr&am
43、p; rhs);判断两个 octetstr对象是否不相等int operator != ( const octetstr& lhs, const char *string);判断 octetstr是否和一个 char*字符串不相等int operator ( const octetstr&lhs, const octetstr& rhs);判断一个 octetstr是否比另一个小int operator ( const octetstr &lhs, const char * string);判断一个 octetstr是否比另一个char *字符串小int ope
44、rator = ( const octetstr &lhs, const 判断一个 octetstr是否 “ 小于等于 ” 另一个octetstr &rhs);int operator ( const octetstr& lhs, const octetstr &rhs);判断一个 octetstr是否比另一个大int operator ( const octetstr& lhs, const char * string);test if one octetstr is greater than a char *.判断一个 octetstr是否比一个ch
45、ar *的字符串大int operator = ( const octetstr& lhs, const octetstr &rhs);判断一个 octetstr是否 “ 大于等于 ” 另一个int operator = ( const octetstr& lhs, const char *);判断一个 octetstr是否 “ 大于等于 ” 一个char*的字符串octetstr& operator +=( const char * string);在一个 octetstr后面连接一个字符串octetstr& operator +=( const un
46、signed char c);在一个 octetstr后面连接一个单字符octetstr& operator+=( const octetstr &octetstr);将两个 octetstr连接在一起unsigned char& operator ( int position i);用数组的形式来访问一个octetstrmiscellaneous void set_data( const unsigned char *s, unsigned long l);用指针和长度来设置一个octetstrint ncompare( const unsigned long n,
47、const octetstr &o);与另一个 octetstr比较前 n 个元素unsigned long len();返回一个 octetstr的长度int valid();返回一个 octetstr的有效性unsigned char * data();返回一个指向内部数据的指针char * get_printable();格式化输出,如果不是ascii则按 16 进制处理char * get_printable_hex();按 16 进制格式,进行格式化输出8.3.注意当输出一个octetstr对象时, 如果该 8 位字节所包含的字符不是ascii码,对成员函数char * 或者
48、 get_printable()的调用,就会自动转换成对成员函数get_printable_hex()的调用。这就使得使用者只需要简单地使用成员函数char * 或 get_printable()来进行输出。而成员函数get_printable_hex()是专门用来把octetstr按 16 进制格式输出的。8.4.一些 octetstr class的例子/ octet class examples#include“ octet.h”void octet_example()octetstr octet1;/ create an invalid un- initialized octet obj
49、ectoctetstr octet2( “ red hook extra bitter ale” );/ create an octet with a stringoctetstr octet3( octet2);/ create an octet with another octetunsigned char raw_data50; / create some raw data octetstr octet4( raw_data, 50);/ create an octetstr using unsigned char dataoctet1 = “ sierra nevada pale al
50、e”; / assign one octet to anothercout octet1.get_printable();/ show octet1 as a null terminated stringcout octet4.get_printable_hex();/ show octet4 as a hex stringcout (char *) octet1;/ same as get_printable()if ( octet1 = octet2) / compare two octetscout = octet3)cout “ octet2 greater than or equal
51、 to octet2”;octet24 = ,b?;/ modify an element of an octetstr using ?s9.timeticks classsnmp+之 timeticks class的对象模型(object modeling technique)视图9.1.时间戳类snmp+的 timeticks class 为使用 smi 中的 timeticks带来了方便。 smi 的时间戳被定义成了一种存放无符号长整形的存储单元。为了成为无符号长整形,smi timeticks被加工成了一种特殊的类型。因此snmp+的 timeticks类具有无符号长整形的所有功能和属
52、性,但同时又是一个独立的类。对无符号长整形的任何操作,拿到timeticks的对象上一样有效。 timeticks class 与其他 snmp+的类,比如vb class 交互的时候,还可以有些额外的操作:在使用vb class 的时候, timeticks的对象可以被置入vb 对象(用vb:set),也从 vb 对象中取出(用vb:get)。也即,对于smi timeticks,开发者可以像对无符号长整形一样来操作,并且还提供了一对一的映射关系。9.2.timeticks class的成员函数列表timeticks class member functions说明constructorst
53、imeticks:timeticks( void);构造一个空的timeticks对象cout octet.len();/ print out the length of an octetstrunsigned char raw_data100; octet1.set_data( raw_data, 100);/ set the data of an to unsigned char data/ get the validity of an octetstrcout (octet1.valid()? “ octet1 is valid” : “ octet1 is invalid”; / en
54、d octet exampletimeticks:timeticks( const unsigned long i );用一个无符号长整形来构造一个timeticks对象timeticks:;timeticks( const timeticks &t);用一个已有的timeticks对象来构造一个新的destructor timeticks:timeticks( );销毁一个 timeticks对象overloaded operators timeticks& operator =( const timeticks &t);重载赋值操作符char * get_print
55、able();格式化输出,格式为:dd days, hh:mm:ss.hhoperator unsigned long();把 timeticks转换为无符号长整形9.3.注意timeticks对象用 timeticks:get_printable()输出时,其值自动被格式化为“ dd days,hh:mm:ss.hh”。其中 dd 代表天, hh 代表小时( 24 时制的), mm 代表分钟, ss 是秒钟, hh 则是百分之几秒。9.4.一些 timeticks class的例子/ timeticks examples#include “ timetick.h”void timeticks
56、_example()timeticks tt;/ create an un-initialized timeticks instancetimeticks tt1( (unsigned long) 57);/ create a timeticks using a numbertimeticks tt2( tt1);/ create a timeticks using another instancett = 192;/ overloaded assignment to a numbertt2 = tt;/ overloaded assignment to another timeticksco
57、ut tt.get_printable(); / print out in dd days, hh:mm:ss.hh cout ( unsigned long)tt; / print out unsigned long int value; / end timeticks example10.counter32 classsnmp+之 counter32 class的对象模型(object modeling technique)视图10.1.32 位计数器类当需要用到smi 中的 32 位计数器时,snmp+的 counter32 class为之带来了方便。smi 的计数器被定义成了一种存放无
58、符号长整形的存储单元。为了成为无符号长整形,smi counters被加工成了一种特殊的类型。因此 snmp+的 counter32类具有无符号长整形的所有功能和属性,但同时又是一个独立的类。对无符号长整形的任何操作,拿到counter32的对象上一样有效。counter32 class 与其他 snmp+的类, 比如 vb class 交互的时候,还可以有些额外的操作:在使用vb class 的时候, counter32的对象可以被置入 vb 对象(用 vb:set),也从 vb 对象中取出(用vb:get)。也即,对于smi counter ,开发者可以像对无符号长整形一样来操作,并且还提
59、供了一对一的映射关系。10.2.counter32 class的成员函数列表counter32 class member functions 说明constructorscounter32:counter32( void);构造一个空的counter32对象counter32:counter32( const unsigned long i );用一个无符号长整形来构造一个counter32对象counter32:counter32( const counter32 &c);用一个已有的counter32对象来构造一个新的destructorcounter32:counter32( )
60、;销毁一个 timeticks对象overloaded operatorscounter32& operator = ( const counter32& c);重载赋值操作符char * get_printable();格式化输出counter32对象operator unsigned long( );把 counter32转换为无符号长整形10.3.一些 counter32 class的例子/ counter examples#include “ counter.h”void counter_example()counter32 ctr;/ create an un-initialized counter instancecounter32 ctr1( (unsigned long) 57);/ create a counter using a number counter32 ctr2(ctr1);/ create a counter using another instance ctr = 192 ; / overloaded assignment to a numberctr1 = ctr;/ overloaded assig
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烟台理工学院《编译原理》2023-2024学年第一学期期末试卷
- 烟台大学《空间表现技法》2022-2023学年第一学期期末试卷
- 一年级数学计算题专项练习汇编
- 许昌学院《虚拟现实程序设计基础》2021-2022学年第一学期期末试卷
- 许昌学院《软件工程实验》2022-2023学年第一学期期末试卷
- 徐州工程学院《英语演讲与辩论》2023-2024学年第一学期期末试卷
- 徐州工程学院《微机原理与接口技术》2023-2024学年第一学期期末试卷
- 孩子们的成长与发展蓝图计划
- 课外阅读与自主学习建议计划
- 科技展览会的安全管理与保障总结计划
- 隧道洞身开挖风水电供应、逃生通道布置
- DB13∕T 5023-2019 有限空间作业安全规范
- 研发中心任职资格职级评审举证要求及材料
- 国家开放大学《思想道德与法治》社会实践参考答案
- 胸膜间皮瘤的诊治新进展
- 碧桂园企业介绍PPT课件
- 菌群移植途径的选择与建立临床应用中国专家共识
- GB_T 3536-2008 石油产品 闪点和燃点的测定 克利夫兰开口杯法
- Landmark2003软件深化及应用
- 工程设计费取费计算表
- 中国石拱桥 (2)
评论
0/150
提交评论