---
title: calculateByFile
description: "调用此函数对基础算子进行文件计算，目前支持密态加法、密态减法、密态最大值、密态最小值、密态乘法、密态除法、密态求均值、密态求和、密态排序、密态比较。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/tee/kcal/kunpeng_kcal_16_0091.html
sourcePath: /source/zh/kunpengcctrustzone/tee/kcal/kunpeng_kcal_16_0091.html
indexId: 173761986a20163a5398a27392914ad0e6a3d3fa82a28dad91e2a7a8b14dc16864
---
# calculateByFile

调用此函数对基础算子进行文件计算，目前支持密态加法、密态减法、密态最大值、密态最小值、密态乘法、密态除法、密态求均值、密态求和、密态排序、密态比较。
```
int calculateByFile(
DG_TeeCtx *dgTeeCtx,
DG_AlgorithmsType type,
DG_MpcFileInputSet *input,
DG_MpcFileOutput *output
)
```


#### 参数

| 参数名 | 描述 | 取值范围 | 输入/输出 |
| --- | --- | --- | --- |
| dgTeeCtx | KCAL上下文信息 | 为initTeeCtx成功初始化的结果 | 输入 |
| type | 算子枚举 DG\_AlgorithmsType | MULTI ： 乘法 DIV ：除法 LT ：小于 LT\_EQ ：小于等于 GT ：大于 GT\_EQ ：大于等于 EQ ： 等于 NEQ： 不等于 AVG ：平均数 SUM： 求和 ASCEND\_SORT ： 升序排序 DESCEND\_SORT ：降序排序 ADD：加法 SUB：减法 MAX：最大值 MIN：最小值 MATRIX\_ADD：矩阵加法 MATRIX\_SUB：矩阵减法 MATRIX\_MUL：矩阵乘法 | 输入 |
| input | 文件数据组装后的结构体 类型为DG\_MpcFileInputSet | 不能输入为NULL | 输入 |
| output | 计算结果 类型为：DG\_MpcFileOutput | 不能输入为NULL | 输出 |


**表1 DG_MpcFileInputSet结构体**

| 名称 | 类型 | 说明 |
| --- | --- | --- |
| shareInputSet | DG\_MpcFileInput\* | 每个参与方的分片文件 |
| size | unsigned long | 参与方数量 |


**表2 DG_MpcFileInput结构体**

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


**表3 DG_MpcFileOutput结构体**

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


#### 返回值

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


#### 错误码


**表4 错误码**

| 错误码 | 错误码值 | 描述 | 特殊说明 |
| --- | --- | --- | --- |
| DG\_ERR\_MPC\_TEE\_INVALID\_PARAM | 4501 | 无效参数 | \- |
| DG\_ERR\_MPC\_TEE\_INVALID\_ALGORITHM\_TYPE | 4502 | 无效算法类型 | \- |
| DG\_ERR\_MALLOC\_FAIL | 51 | 内存分配失败 | \- |
| DG\_ERR\_MPC\_TEE\_DIV\_IS\_ZERO | 4512 | 除0异常 | \- |
| DG\_FAILURE | 1 | 算子执行失败 | 参数校验失败 分片失败 接收对方数据失败 |


#### 依赖

依赖调用revealShareByFile的返回结果。


#### 示例

- 使用调用initTeeCtx成功后的dgTeeCtx来调用calculateByFile接口。
- 通过分片获取的是单个数据方的分片结果，需要用户调用makeShareByFile，将各方的文件输出为文件分片。
- 对于基础运算，其中有计算节点和非计算节点，规定：其中0为计算节点，1为非计算节点，支持三方的算子，2为非计算节点。


```
#include  "data_guard_mpc.h"
//计算方
std::vector<DG_MpcFileInput> inputs(inputFilePaths.size());
for (size_t i = 0; i < inputFilePaths.size(); ++i) {
inputs[i].filePath = const_cast<char *>(inputFilePaths[i].c_str());
inputs[i].pathLen = static_cast<uint32_t>(inputFilePaths[i].length());
}
DG_MpcFileInputSet inputSet;
inputSet.shareInputSet = inputs.data();
inputSet.size = static_cast<uint32_t>(inputFilePaths.size());
DG_MpcFileOutput teeFileOutput;
teeFileOutput.filePath = const_cast<char *>(outputFilePath.c_str());
teeFileOutput.pathLen = static_cast<uint32_t>(outputFilePath.length());
int ret = opts_->calculateByFile(dgTeeCtx_, ADD, &inputSet, &teeFileOutput);
```
