---
title: makeShareByFile
description: "两方计算调用此函数对原始数据进行分片，分为计算方0节点和非计算方1节点，当为计算方时先设置isRecvShare为1用于接收非计算方发送的分片，后设置isRecvShare为0用于分片自身的数据。当为非计算方时设置isRecvShare为0用于分片自身的数据，并将分片发送给计算方。三方计算调用此函数对原始数据进行分片，分为计算方0节点、非计算方1、2节点，可以对任意两个节点原始数据进行分片，假设0，1节点有数据，当为计算方时节点0先设置isRecvShare为1用于接收非计算方发送的分片，后设置isRecvShare为0用于分片自身的数据。当为非计算方时，节点1设置isRecvShare为0用于分片自身的数据，并将分片发送给计算方，设置isRecvShare为1时用于接收节点0发送的分片。然后节点2设置isRecvShare为1用于接收0节点发送的分片，设置isRecvShare为1用于接收1节点发送的分片。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/tee/kcal/kunpeng_kcal_16_0092.html
sourcePath: /source/zh/kunpengcctrustzone/tee/kcal/kunpeng_kcal_16_0092.html
indexId: a22f11004337f659471f3e7e0c3f48a3ea58020aa0dc8b7e3eb57d52d28ed35964
---
# makeShareByFile

两方计算调用此函数对原始数据进行分片，分为计算方0节点和非计算方1节点，当为计算方时先设置isRecvShare为1用于接收非计算方发送的分片，后设置isRecvShare为0用于分片自身的数据。当为非计算方时设置isRecvShare为0用于分片自身的数据，并将分片发送给计算方。三方计算调用此函数对原始数据进行分片，分为计算方0节点、非计算方1、2节点，可以对任意两个节点原始数据进行分片，假设0，1节点有数据，当为计算方时节点0先设置isRecvShare为1用于接收非计算方发送的分片，后设置isRecvShare为0用于分片自身的数据。当为非计算方时，节点1设置isRecvShare为0用于分片自身的数据，并将分片发送给计算方，设置isRecvShare为1时用于接收节点0发送的分片。然后节点2设置isRecvShare为1用于接收0节点发送的分片，设置isRecvShare为1用于接收1节点发送的分片。
```
int makeShareByFile(
DG_TeeCtx *dgTeeCtx,
int isRecvShare,
const DG_MpcFileInput *input,
DG_MpcFileOutput *output
)
```


#### 参数

| 参数名 | 描述 | 取值范围 | 输入/输出 |
| --- | --- | --- | --- |
| dgTeeCtx | KCAL上下文信息 | 为initTeeCtx成功初始化的结果 | 输入 |
| isRecvShare | 0为自身原始数据分片 1为接收对方数据的分片 | 0或1 | 输入 |
| input | DG\_MpcFileInput | 不能输入为NULL | 输入 |
| output | DG\_MpcFileOutput | 不能输入为NULL | 输出 |


**表1 DG_MpcFileInput结构体**

| 名称 | 类型 | 说明 |
| --- | --- | --- |
| filePath | char\* | 文件路径 |
| pathLen | uint32\_t | 路径长度 |
| dataSize | uint64\_t | 数据大小 |


**表2 DG_MpcFileOutput结构体**

| 名称 | 类型 | 说明 |
| --- | --- | --- |
| filePath | char\* | 文件路径 |
| pathLen | uint32\_t | 路径长度 |
| dataSize | uint64\_t | 数据大小 |


#### 返回值

- 成功：返回0。
- 失败：返回错误码。


#### 错误码


**表3 错误码**

| 错误码 | 错误码值 | 描述 | 特殊说明 |
| --- | --- | --- | --- |
| DG\_ERR\_MPC\_TEE\_INVALID\_PARAM 4516 | 4501 DG\_ERR\_MPC\_TEE\_TMP\_PATH\_SET\_ERROR | 无效参数 临时目录设置错误 | \- |
| DG\_ERR\_MPC\_TEE\_INVALID\_ALGORITHM\_TYPE 4514 | 4502 DG\_ERR\_MPC\_TEE\_CHUNK\_SIZE\_SET\_ERROR | 无效算法类型 文件分片块大小设置错误 | \- |


#### 依赖

- dgTeeCtx依赖  initTeeCtx
的成功初始化。
- 依赖的头文件为"data_guard_mpc.h"。


#### 示例

- 调用DG_InitArithmeticOpts成功后的aritOpts来调用makeShareByFile接口。
- 在两个节点（0计算节点和1计算节点）中调用接口时，若某一调用方返回非成功错误码，需要此调用方通过任务调度通知对端结束业务流程。例如，调用makeShareByFile时1计算节点返回错误码，0计算节点在等待接收，此时需要调用方通知0计算节点停止接收。


```
#include  "data_guard_mpc.h"
//计算方
DG_MpcFileInput teeFileInput;
teeFileInput.filePath = const_cast<char *>(inputFilePath.c_str());
teeFileInput.pathLen = static_cast<uint32_t>(inputFilePath.length());
DG_MpcFileOutput teeFileOutput;
teeFileOutput.filePath = const_cast<char *>(shareFilePath.c_str());
teeFileOutput.pathLen = static_cast<uint32_t>(shareFilePath.length());
int ret = opts_->makeShareByFile(dgTeeCtx_, isRecvShare, &teeFileInput, &teeFileOutput);
```
