c语言下的工厂模式——ipmi源码分析

c语言下的工厂模式——ipmi源码分析,第1张

c语言下的工厂模式——ipmi源码分析,第2张

IPMItool的架构
= = = = = = = = = = = =
源目录如下
+-contrib//用于构建web管理页面的shell脚本
+-control//包含一些安装和配置信息[包含changelog等信息
+-doc//man的帮助信息
+-Include
| \-IPMItool//头文件定义
+-lib//IPMI规范的相应实现,如IPMI。-src//这个目录下是ipmitool的三个主程序
\ -Plugins//IPMI _ INTF。c接口。一些常用功能的实现
+-BMC//IPMITool与BMC内核驱动程序的接口
+-IMB//英特尔IMB接口
+-LAN// IPMI v1.5 LAN接口
+-LAN plus//IPMI v 2.0 RMCP+LAN接口
+ - lipmi // Solaris x86 LIPMI接口
\ - open // Linux OpenIPMI接口[默认]

C中的工厂模式
= = = = = = = = = = = = = = =
从上面的目录结构中不难看出,IPMItool设计的一个重要特点就是将不同的接口视为插件。使得系统结构清晰,扩展性好。

IPMI规范中定义的实体,如会话、fru、sdr、机箱、传感器等。,是在lib中实现的。这部分和具体接口是分开的。接口的通用接口在include\ipmitool\ipmi_intf.h中定义;接口的一般函数实现在\src\plugins\ipmi_intf.c中..值得注意的是,接口是IPMI规范中定义的一个概念,本文中使用的中文“接口”一词是指一般意义上的接口。

这种将通用接口与具体实现分离的方式无疑是一种工厂方法模式。

Practice
= = =
那么interface作为插件具体是怎么实现的呢?可以从一个具体的例子来看。


structipmi _ intf {
...
struct IPMI _ session * session由include\ipmitool\ipmi_intf.h中的ipmi_intf定义;
struct IPMI _ OEM _ handle * OEM;
uint 32 _ t my _ addr;
uint 32 _ t target _ addr;

int(* setup)(struct IPMI _ intf * intf);
int(* open)(struct IPMI _ intf * intf);
void(* close)(struct IPMI _ intf * intf);
...
};

与OO语言类似,struct在内部定义数据和方法。区别在于方法是一个函数指针。因为没有this指针,所以函数的形参是指向它自己结构的指针。比如设置。

并且在具体实现上,比如src\plugins\lan\lan.c,给出了具体的功能实现。例如ipmi_lan_setup。在ipmi_lan_setup中,可以使用参数定义的intf指针来操作IPMI _ intf结构中的相应数据。

struct IPMI _ intf IPMI _ LAN _ intf = {
name:" LAN ",
desc: "IPMI v1.5 LAN接口",
setup: ipmi_lan_setup,
open: ipmi_lan_open,
close: ipmi_lan_close,
send recv:IPMI _ LAN _ send _ cmd,
send RSP:IPMI _ LAN _ send _ RSP,

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » c语言下的工厂模式——ipmi源码分析

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情