以下接口提供了一种机制,用于在 8 位和 64 位数据之间进行传送。get 接口使用重复计数 (rep_cnt) 来表示进程将从连续位置读取的给定大小的数据项数。这些位置从导入的段中的字节偏移 offset 开始。数据会写入从 datap 开始的连续位置。put 接口可使用重复计数 (rep_cnt)。此计数表示进程将从连续位置读取的数据项数。这些位置从 datap 开始。然后,数据会写入已导入段中的连续位置。这些位置从 offset 参数所指定的字节偏移开始。
如果源与目标具有不兼容的字节存储顺序特征,则这些接口还可提供字节交换功能。
int rsm_memseg_import_get8(rsm_memseg_import_handle_t im_memseg, off_t offset, uint8_t *datap, ulong_t rep_cnt);以下接口用于进行规模大于段访问操作所支持范围的数据传送。
int rsm_memseg_import_put(rsm_memseg_import_handle_t im_memseg, off_t offset, void *src_addr, size_t length);此函数可用于将数据从 src_addr 和 length 所指定的本地内存复制到句柄和偏移所指定的对应导入的段所在位置。
int rsm_memseg_import_get(rsm_memseg_import_handle_t im_memseg, off_t offset, void *dst_addr, size_t length);此函数类似于 rsm_memseg_import_put(),但是数据从导入的段流入 dest_vec 参数所定义的本地区域。
put 和 get 例程从参数 offset 所指定的字节偏移位置写入或读取指定的数据量。这些例程从段的基地址开始。偏移必须在相应的边界对齐。例如,rsm_memseg_import_get64() 要求 offset 和 datap 在双字界对齐,而 rsm_memseg_import_put32() 则要求偏移在单字边界对齐。
缺省情况下,段的屏障 (barrier) 模式属性为 implicit。 隐式屏障 (barrier) 模式表示调用方假设数据传送在从操作返回时已完成或失败。 由于缺省屏障 (barrier) 模式为隐式,因此应用程序必须初始化屏障 (barrier)。使用缺省模式时,应用程序会在调用 put 或 get 例程之前使用 rsm_memseg_import_init_barrier() 函数初始化屏障 (barrier)。要使用显式操作模式,调用方必须使用屏障 (barrier) 操作来强制完成传送。强制完成传送之后,调用方必须确定强制完成是否产生了任何错误。
通过在 rsm_memseg_import_map() 例程中传递偏移可以部分映射导入段。如果部分映射了导入段,则 put 或 get 例程中的 offset 参数是相对于段的基地址。用户必须确保将正确的字节偏移传递给 put 和 get 例程。
返回值:如果成功,则返回 0。否则返回错误值。
段句柄无效
地址错误
内存对齐无效
偏移无效
长度无效
权限被拒绝
未初始化屏障 (barrier)
I/O 完成错误
连接异常中止
资源不足