FC总线

(一)特点:

FC具备通道和网络双重优势,具备高带宽、高可靠性、高稳定性,抵抗电磁干扰等优点,能够提供非常稳定可靠的光纤连接,容易构建大型的数据传输和通信网络,目前支持1x、2x、4x和8x的带宽连接速率,随着技术的不断发展该带宽还在不断进行扩展,以满足更高带宽数据传输的技术性能要求。

(二)协议:

1.FC光纤通道5层协议: 类似于OSI的七层模型结构和TCP/IP的四层模型结构,FC协议具有五层模型结构。

FC-0(接口与媒体层):连接物理介质的界面,电缆等;定义编码和解码的标准。规定了各种介质和与之有关的能以各种速率运行的驱动机和接收机。FC-1(传输协议层):传输协议层或数据链接层,编码或解码信息。该码型使控制字节与数据字节分离且可简化比特,字节和字同步。FC-2(链路控制层):网络层,光纤通道的核心,定义了帧,流控制,和服务质量等。FC-3(通用服务层):定义了常用服务,如数据加密和压缩。是光纤通道节点的多个端口所公用的。FC-4(协议映射层):协议映射层,定义了光纤通道和上层应用之间的接口,上层应用比如:串行SCSI协议;

2.一个帧是在光纤通道连接中数据包的最小单位。

每个帧包括开始分隔符,大小为24个字节的固定帧头,多种可操作服务头,从0到2112个字节的长度灵活的有效载荷,一个帧标准循环冗余校验和一个结束分隔符。 序列是从一个N端口向另一个N端口单向传送一个或多个相关的帧,序列是单向传送的。交换由一个或多个非并发的序列组成,既可以单向的也可以双向的。

(三)FC拓扑结构

1)点对点 - 通过光缆直接连接两个设备的端口,能够提供最大带宽并可实现全双工连接,可用于连接有大量持续数据传输要求的节点。

2)仲裁环最多支持126个设备的高速连接,数据在环路的一个方向上传送,在任一时刻仲裁环只有一对端口进行通信,环中的设备只有当环处于空闲状态,才能通过仲裁获得仲裁环的使用权,一个或多个仲裁环路的网状结构可以组成混合结构。

3)交换式网络在三种拓扑结构中功能最强大、可靠性最高、性能最好、带宽最大,可以连接多达 1600 万个设备,而且在同一时刻允许多个设备进行高速通信,各终端的端口通过点对点的双向连接与交换机端口互连,每个端口都可以最大速度与交换机的端口建立连接。

(四)FC接口测试

自动化接口测试 引用第三方库操作C语言结构:CTypes库

ctypes库:

ctypes使用介绍. ctypes 是 Python 的外部函数库。. 它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数。. 可使用该模块以纯 Python 形式对这些库进行封装。 在Python语言中,可以使用ctypes模块调用其它如C++语言编写的动态链接库DLL文件中的函数,在提高软件运行效率的同时,也可以充分利用目前市面上各种第三方的DLL库函数,以扩充Python软件的功能及应用领域,减少重复编写代码、重复造轮子的工作量,这也充分体现了Python语言作为一种胶水语言所特有的优势。 参考博文:https://cloud.tencent.com/developer/news/333340#:~:text=%E5%9C%A8Python%E8%AF%AD,%E8%A8%80%E6%89%80%E7%89%B9%E6%9C%89%E7%9A%84%E4%BC%98%E5%8A%BF%E3%80%82

Python_ctypes指定函数参数类型和返回类型

C++动态链接库导出函数的返回类型都是int型,而Python默认函数的参数类型和返回类型为int型,所以Python理所当然的以为dll导出函数返回了一个int类型的值。 但是如果C++动态链接库导出的函数返回类型不是int型,而是特定类型,就需要指定ctypes的函数返回类型restype。同样,通过ctypes给函数传递参数时,参数类型默认为int型,如果不是int型,而是特定类型,就需要指定ctypes的函数形参类型argtypes。

myTest.cpp

#include "stdafx.h"

#define DLLEXPORT extern "C" __declspec(dllexport) //放在 #include "stdafx.h" 之后

#include //使用string类型 需要包含头文件

using namespace std; //string类是一个模板类,位于名字空间std中

//字符串

DLLEXPORT char *getRandData(char *arg) {

return arg;

}

python代码

from ctypes import *

pDll = CDLL("./myTest.dll")

########## 指定 函数的参数类型 #################

pDll.getRandData.argtypes = [c_char_p]

#第一个参数

arg1 = c_char_p(bytes("hello", 'utf-8'))

########## 指定 函数的返回类型 #################

pDll.getRandData.restype = c_char_p

########### 调用动态链接库函数 ##################

res = pDll.getRandData(arg1)

#打印返回结果

print(res.decode()) #返回的是utf-8编码的数据,需要解码

或者如下形式

from ctypes import *

pDll = CDLL("./myTest.dll")

########## 指定 函数的返回类型 #################

pDll.getRandData.restype = c_char_p

########### 调用动态链接库函数 ##################

res = pDll.getRandData(b'hello') # 或者变量.encode()

#打印返回结果

print(res.decode()) #返回的是utf-8编码的数据,需要解码

运行结果如下:

Python_ctypes dll返回数组结构体

在ctypes里,可以把数组指针传递给dll,但是我们无法通过dll获取到c++返回的数组指针。由于python中没有对应的数组指针类型,因此,要获取dll返回的数组,我们需要借助结构体。

参考博文:https://www.cnblogs.com/FHC1994/p/11421229.html

后续继续添加…

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。