---
title: zstd接口
description: "zstd优化接口。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengaccel/storage/ksal/kunpengksal_16_0028.html
sourcePath: /source/zh/kunpengaccel/storage/ksal/kunpengksal_16_0028.html
indexId: 3806055d417f494899e32f8f17ff3b0542d7474e36652e30f884a99337bd981961
---
# zstd接口

#### 接口描述

zstd优化接口。


#### 接口格式

压缩接口：

- size_t ZSTD_compress2(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);

解压接口：

- size_t ZSTD_decompress(void* dst, size_t dstCapacity, const void* src, size_t compressedSize);


#### 参数释义


**表1 压缩接口参数**

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| cctx | 结构体指针 | 待压缩内容初始化参数信息。 （通过开源zstd提供的ZSTD\_createCCtx()函数接口进行初始化创建。通过ZSTD\_CCtx\_setParameter()函数接口进行参数赋值。具体可参见zstd.h头文件） | 输入 |
| dst | 指针数组 | 存储压缩后内容的目标数组。 | 输入/输出 |
| dstCapacity | 整型数 | 目标缓冲区的容量。 | 输入 |
| src | 指针数组 | 存储待压缩内容的源数组。 | 输入 |
| srcSize | 整型数 | 待压缩内容的字节数。 | 输入 |
| ret | 整型数 | 成功返回压缩后的字节数，失败返回错误码。 | 输出 |


**表2 解压接口参数**

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| dst | 指针数组 | 存储解压后内容的目标数组。 | 输入/输出 |
| dstCapacity | 整型数 | 解压后内容的字节数上界 | 输入 |
| src | 指针数组 | 存储待解压内容的源数组。 | 输入 |
| compressedSize | 整型数 | 待解压内容的字节数。 | 输入 |
| ret | 整型数 | 成功返回解压后的原始内容字节数，失败返回错误码。 | 输出 |


#### 使用依赖

zstd.h头文件。

在使用前，请参见5-编译安装KSAL zstd算法包章节，完成完整libzstd.so动态库的编译部署。


#### 使用实例

1. 编写zstd测试代码。

  a. 新建“test.c”文件。
    1 vi test.c

  b. 按“i”键进入编辑模式，添加如下测试代码。
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <stdint.h> #include <stdio.h> #include <assert.h> #include <string.h> #include "/usr/ksal_zstd/zstd.h" #define BLOCK_SIZE (128 * 1024) #define DST_SIZE (1024 * 1024) uint8_t inn[BLOCK_SIZE]={0}; uint8_t outt[DST_SIZE]; uint8_t doutt[DST_SIZE]; int main(int argc, char **argv) { ZSTD_CCtx *cctx = ZSTD_createCCtx(); ZSTD_CCtx_setParameter(cctx, ZSTD_c_compressionLevel, 5); size_t compressed = ZSTD_compress2(cctx, (void *)outt, DST_SIZE, (void *)inn, BLOCK_SIZE); size_t decompressed = ZSTD_decompress(doutt, DST_SIZE, outt, compressed); assert(decompressed == BLOCK_SIZE); assert(memcmp(doutt, inn, BLOCK_SIZE) == 0); ZSTD_freeCCtx(cctx); printf("compression and decompression succ!!\n"); return 0; }

  c. 按“Esc”键退出编辑模式，输入:wq!并按“Enter”键保存退出文件。
2. 编译“test.c”文件，生成test可执行文件。
  1 gcc test.c -L/usr/ksal_zstd -l:libzstd.so -o test

3. 导入环境变量。
  1 export LD_LIBRARY_PATH=/usr/ksal_zstd:$LD_LIBRARY_PATH

4. 运行test可执行文件。
  1 LD_PRELOAD=/usr/ksal_zstd/libzstd.so ./test

  执行输出如下。 1 compression and decompression succ!!
