从零手写生产级 MCP Server:鉴权、流式传输与状态管理的完整实现
2026/9/29 18:22:07
轻量级公共基础库(commonlibrary_utils_lite)是OpenHarmony系统中的通用基础组件库,提供以下核心功能:
| 功能模块 | 描述 | 支持平台 |
|---|---|---|
| 文件操作 | 提供统一的文件操作接口,屏蔽底层不同芯片组件的差异 | LiteOS-M内核 |
| 定时器 | 提供统一的定时器操作接口,支持单次和周期性定时 | LiteOS-M/LiteOS-A内核 |
| KV存储 | 提供键值对存储功能,支持缓存机制 | LiteOS-A内核 |
| JS API | 提供设备信息查询、数据存储的JavaScript接口 | LiteOS-A内核 |
| 双向链表 | 提供高效的双向链表数据结构操作 | 通用 |
| 内存池管理 | 提供分类型的内存池管理接口 | 通用 |
本模块属于OpenHarmony系统的公共基础子系统(commonlibrary),是系统的核心基础模块,为上层应用和其他子系统提供基础服务支持。
┌─────────────────────────────────────────────────────────────────────┐ │ 应用层 (Application Layer) │ │ ┌─────────────────────────────┐ │ │ │ JS 应用程序 │ │ │ └─────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────────┤ │ 框架层 (Framework Layer) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ ACE Lite │ │ Ability │ │ UI Lite │ │ │ │ Engine │ │ Framework │ │ │ │ │ └──────┬──────┘ └──────┬──────┘ └─────────────┘ │ ├─────────┼────────────────┼──────────────────────────────────────────┤ │ │ │ │ │ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ commonlibrary_utils_lite │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │ │ │ │ 文件操作 │ │ 定时器 │ │ KV存储 │ │ JS API │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │ │ │ │ ┌──────────┐ ┌──────────┐ │ │ │ │ │ 双向链表 │ │ 内存池 │ │ │ │ │ └──────────┘ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ 公共基础子系统 │ ├─────────────────────────────────────────────────────────────────────┤ │ 内核层 (Kernel Layer) │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ LiteOS-M / LiteOS-A │ │ │ └─────────────────────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────────┤ │ 硬件抽象层 (HAL) │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ HAL File / HAL Timer / HAL Memory │ │ │ └─────────────────────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────────┤ │ 硬件层 (Hardware Layer) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Hi3861 │ │ Hi3516 │ │ Hi3518 │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────────────┘| 依赖模块 | 关系类型 | 说明 |
|---|---|---|
| ability_lite | 被依赖 | 提供应用数据路径获取 |
| ace_engine_lite | 被依赖 | 提供JS引擎支持 |
| graphic_utils_lite | 被依赖 | 提供图形相关工具 |
| bounds_checking_function | 依赖 | 安全字符串处理函数 |
| musl | 依赖 | C标准库支持 |
| init | 被依赖 | 系统初始化服务 |
分层架构设计
模块化设计
跨语言支持
| 设计模式 | 应用场景 | 说明 |
|---|---|---|
| 适配器模式 | HAL层 | 将不同硬件平台的文件/定时器操作适配为统一接口 |
| 单例模式 | 内存池管理 | 确保内存池的唯一性和全局访问 |
| 工厂模式 | 定时器创建 | 通过KalTimerCreate创建不同类型的定时器 |
| 回调模式 | JS异步操作 | 通过success/fail/complete回调处理异步结果 |
| 门面模式 | JS API | NativeapiFs/NativeapiKv等类封装底层复杂操作 |
commonlibrary/utils_lite/ ├── BUILD.gn # 顶层构建文件 ├── bundle.json # 组件描述文件 ├── include/ # 公共头文件目录 │ ├── kv_store.h # KV存储接口 │ ├── ohos_errno.h # 错误码定义 │ ├── ohos_init.h # 系统初始化宏 │ ├── ohos_types.h # 基础类型定义 │ ├── utils_config.h # 配置文件 │ ├── utils_file.h # 文件操作接口 │ └── utils_list.h # 双向链表接口 ├── file/ # 文件操作模块 │ └── src/file_impl_hal/ │ └── file.c # 文件操作实现 ├── hals/ # 硬件抽象层 │ └── file/ │ ├── hal_file.h # HAL文件接口 │ └── hal_file.c # HAL文件实现 ├── kal/ # 内核抽象层 │ └── timer/ │ ├── include/kal.h # KAL定时器接口 │ └── src/kal.c # KAL定时器实现 ├── timer_task/ # 定时任务模块 │ ├── include/nativeapi_timer_task.h │ └── src/nativeapi_timer_task.c ├── memory/ # 内存管理模块 │ └── include/ohos_mem_pool.h # 内存池接口 └── js/builtin/ # JS API模块 ├── common/ # 公共组件 │ ├── include/ │ │ ├── nativeapi_common.h │ │ └── nativeapi_config.h │ └── src/nativeapi_common.cpp ├── filekit/ # 文件Kit │ ├── include/ │ │ ├── nativeapi_fs.h │ │ └── nativeapi_fs_impl.h │ └── src/ │ ├── nativeapi_fs.cpp │ └── nativeapi_fs_impl.c ├── kvstorekit/ # KV存储Kit │ ├── include/ │ │ ├── nativeapi_kv.h │ │ └── nativeapi_kv_impl.h │ └── src/ │ ├── nativeapi_kv.cpp │ └── nativeapi_kv_impl.c └── deviceinfokit/ # 设备信息Kit ├── include/nativeapi_deviceinfo.h └── src/ ├── nativeapi_deviceinfo.cpp └── nativeapi_ohos_deviceinfo.cpp| 文件 | 功能描述 |
|---|---|
include/ohos_types.h | 定义基础数据类型(uint8, uint16, uint32等) |
include/ohos_errno.h | 定义系统错误码枚举 |
include/ohos_init.h | 定义系统初始化宏(CORE_INIT, SYS_SERVICE_INIT等) |
include/utils_file.h | 声明文件操作API(打开、关闭、读写、删除等) |
include/utils_list.h | 声明双向链表操作API和宏 |
include/kv_store.h | 声明KV存储API(获取、设置、删除) |
include/utils_config.h | 定义KV存储配置参数 |
hals/file/hal_file.h | 声明HAL层文件操作接口 |
hals/file/hal_file.c | 实现HAL层文件操作(调用POSIX接口) |
file/src/file_impl_hal/file.c | 文件操作的HAL适配实现 |
kal/timer/include/kal.h | 声明KAL定时器接口 |
kal/timer/src/kal.c | 实现KAL定时器(基于POSIX timer) |
timer_task/include/nativeapi_timer_task.h | 声明定时任务接口 |
timer_task/src/nativeapi_timer_task.c | 实现定时任务管理 |
memory/include/ohos_mem_pool.h | 声明内存池管理接口 |
js/builtin/common/include/nativeapi_common.h | JS API公共回调处理 |
js/builtin/common/include/nativeapi_config.h | JS API配置常量定义 |
js/builtin/filekit/include/nativeapi_fs.h | JS文件操作API声明 |
js/builtin/kvstorekit/include/nativeapi_kv.h | JS KV存储API声明 |
js/builtin/deviceinfokit/include/nativeapi_deviceinfo.h | JS设备信息API声明 |
// 文件: include/utils_list.htypedefstructUTILS_DL_LIST{structUTILS_DL_LIST*pstPrev;// 指向前一个节点的指针structUTILS_DL_LIST*pstNext;// 指向后一个节点的指针}UTILS_DL_LIST;// 文件: kal/timer/src/kal.ctypedefstruct{timer_ttimerPtr;// POSIX定时器句柄KalTimerType type;// 定时器类型(单次/周期)unsignedintmillisec;// 定时时间(毫秒)KalTimerProc func;// 回调函数unionsigval arg;// 回调参数intisRunning;// 运行状态标志}KalTimer;// 文件: kal/timer/include/kal.htypedefenum{KAL_TIMER_ONCE=0,// 单次定时器KAL_TIMER_PERIODIC=1// 周期定时器}KalTimerType;// 文件: kal/timer/include/kal.htypedefenum{KAL_OK=0,// 成功KAL_ERR_PARA=1,// 参数错误KAL_ERR_INNER=2,// 内部错误KAL_ERR_TIMER_STATE=0x100,// 定时器状态错误}KalErrCode;// 文件: include/ohos_errno.henumOHOSLiteErrorCode{EC_SUCCESS=0,// 成功EC_FAILURE=-1,// 执行失败EC_BADPTR=-2,// 错误指针EC_NOMEMORY=-3,// 内存不足EC_ADDRESS=-4,// 地址错误EC_IOERROR=-5,// I/O错误EC_BUSBUSY=-6,// 总线忙EC_NORESPONCE=-7,// 无响应EC_NODEVICE=-8,// 无设备EC_INVALID=-9,// 无效参数EC_BUSY=-10,// 设备忙EC_NOSERVICE=-11,// 无服务EC_PERMISSION=-12,// 权限拒绝EC_NOFILE=-13,// 文件不存在EC_NOSPACE=-14,// 空间不足EC_NODIR=-15,// 非目录EC_ROFILE=-16,// 只读文件系统EC_NAMETOOLONG=-17,// 文件名过长EC_OPBLOCK=-18,// 操作阻塞EC_TIMEOUT=-19,// 超时EC_COMMU=-20,// 通信错误EC_PROTOCOL=-21,// 协议错误EC_CANCELED=-22,// 操作取消EC_NOKEY=-23,// 无密钥EC_NOHANDLER=-24,// 无处理器EC_FLOWCTRL=-25,// 流控制EC_NOINIT=-26,// 未初始化EC_NORESOURCE=-27,// 资源错误// ...};// 文件: memory/include/ohos_mem_pool.htypedefenum{MEM_TYPE_BEGIN=100,MEM_TYPE_UIKIT=MEM_TYPE_BEGIN,// UIKIT内存池MEM_TYPE_UIKIT_LSRAM,// UIKIT低速内存池MEM_TYPE_APPFMK,// 应用框架内存池MEM_TYPE_APPFMK_LSRAM,// 应用框架低速内存池MEM_TYPE_ACE,// ACE内存池MEM_TYPE_ACE_LSRAM,// ACE低速内存池MEM_TYPE_JERRY,// JerryScript内存池MEM_TYPE_JERRY_LSRAM,// JerryScript低速内存池MEM_TYPE_JERRY_HEAP,// JerryScript堆内存池MEM_TYPE_HICHAIN,// 安全内存池MEM_TYPE_SOFTBUS_LSRAM,// 软总线低速内存池MEM_TYPE_I18N_LSRAM,// 国际化低速内存池MEM_TYPE_CJSON_LSRAM,// cJSON低速内存池MEM_TYPE_APP_VERIFY_LSRAM,// 应用验证低速内存池MEM_TYPE_MAX// 最大值}MemType;// 文件: js/builtin/common/include/nativeapi_common.hnamespaceOHOS{namespaceACELite{structFuncParams{JSIValue args=JSI::CreateUndefined();// 参数JSIValue thisVal=JSI::CreateUndefined();// this指针boolflag=false;// 标志位};}}// 文件: js/builtin/common/include/nativeapi_common.hnamespaceOHOS{namespaceACELite{classNativeapiCommon{public:// 失败回调处理staticvoidFailCallBack(constJSIValue thisVal,constJSIValue args,intret);// 成功回调处理staticvoidSuccessCallBack(constJSIValue thisVal,constJSIValue args,JSIValue jsiValue);// 验证JSI值有效性staticboolIsValidJSIValue(constJSIValue*args,uint8_targsNum);private:NativeapiCommon()=default;~NativeapiCommon()=default;};}}// 文件: js/builtin/filekit/include/nativeapi_fs.hnamespaceOHOS{namespaceACELite{classNativeapiFs{public:NativeapiFs()=default;~NativeapiFs()=default;staticJSIValueMoveFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueCopyFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueDeleteFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueGetFileList(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueGetFileInfo(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueWriteTextFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueReadTextFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueAccess(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueCreateDir(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueRemoveDir(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);#if(JS_FWK_TYPEDARRAY==NATIVE_FEATURE_ON)staticJSIValueReadArrayFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueWriteArrayFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);#endif};}}// 文件: js/builtin/kvstorekit/include/nativeapi_kv.hnamespaceOHOS{namespaceACELite{classNativeapiKv{public:NativeapiKv()=default;~NativeapiKv()=default;staticJSIValueGet(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueSet(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueDelete(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueClear(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);};}}// 文件: js/builtin/deviceinfokit/include/nativeapi_deviceinfo.hnamespaceOHOS{namespaceACELite{classNativeapiDeviceInfo{public:NativeapiDeviceInfo()=default;~NativeapiDeviceInfo()=default;staticJSIValueGetDeviceInfo(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticboolGetProductInfo(JSIValue result);private:staticboolGetLanguage(JSIValue result);staticboolGetRegion(JSIValue result);staticboolGetAPILevel(JSIValue result);staticboolGetDeviceType(JSIValue result);};}}| 函数 | 描述 | 参数 | 返回值 |
|---|---|---|---|
UtilsFileOpen | 打开或创建文件 | path: 文件路径 oflag: 打开标志 mode: 模式 | 文件描述符,失败返回-1 |
UtilsFileClose | 关闭文件 | fd: 文件描述符 | 0成功,-1失败 |
UtilsFileRead | 读取文件 | fd: 文件描述符 buf: 缓冲区 len: 长度 | 读取字节数,-1失败 |
UtilsFileWrite | 写入文件 | fd: 文件描述符 buf: 数据 len: 长度 | 写入字节数,-1失败 |
UtilsFileDelete | 删除文件 | path: 文件路径 | 0成功,-1失败 |
UtilsFileStat | 获取文件大小 | path: 文件路径 fileSize: 输出大小 | 0成功,-1失败 |
UtilsFileSeek | 调整读写位置 | fd: 文件描述符 offset: 偏移 whence: 起始位置 | 当前位置,-1失败 |
UtilsFileCopy | 复制文件 | src: 源文件 dest: 目标文件 | 0成功,-1失败 |
UtilsFileMove | 移动文件 | src: 源文件 dest: 目标文件 | 0成功,-1失败 |
| 函数 | 描述 | 参数 | 返回值 |
|---|---|---|---|
KalTimerCreate | 创建定时器 | func: 回调函数 type: 类型 arg: 参数 millisec: 时间 | 定时器ID,NULL失败 |
KalTimerStart | 启动定时器 | timerId: 定时器ID | KAL_OK成功 |
KalTimerChange | 修改定时器 | timerId: 定时器ID millisec: 新时间 | KAL_OK成功 |
KalTimerStop | 停止定时器 | timerId: 定时器ID | KAL_OK成功 |
KalTimerDelete | 删除定时器 | timerId: 定时器ID | KAL_OK成功 |
KalTimerIsRunning | 查询运行状态 | timerId: 定时器ID | 1运行中,0停止 |
| 函数 | 描述 | 参数 | 返回值 |
|---|---|---|---|
UtilsGetValue | 获取键值 | key: 键名 value: 输出值 len: 缓冲区大小 | 值长度,-9参数错误,-1其他错误 |
UtilsSetValue | 设置键值 | key: 键名 value: 值 | 0成功,-9参数错误,-1其他错误 |
UtilsDeleteValue | 删除键值 | key: 键名 | 0成功,-9参数错误,-1其他错误 |
ClearKVCache | 清空缓存 | 无 | 0成功,-1失败 |
| 函数 | 描述 | 参数 | 返回值 |
|---|---|---|---|
OhosMalloc | 申请内存 | type: 内存池类型 size: 大小 | 内存地址,NULL失败 |
OhosFree | 释放内存 | ptr: 内存地址 | 无 |
| 函数/宏 | 描述 |
|---|---|
UtilsListInit | 初始化链表 |
UtilsListAdd | 插入节点 |
UtilsListTailInsert | 尾部插入 |
UtilsListHeadInsert | 头部插入 |
UtilsListDelete | 删除节点 |
UtilsListEmpty | 判断是否为空 |
UTILS_DL_LIST_ENTRY | 获取包含链表的结构体指针 |
UTILS_DL_LIST_FOR_EACH | 遍历链表 |
UTILS_DL_LIST_FOR_EACH_SAFE | 安全遍历链表 |
依赖关系说明:
| 外部模块 | 交互方式 | 说明 |
|---|---|---|
| ACE Lite Engine | C++函数调用 | 通过JSI接口注册JS API |
| Ability Framework | C函数调用 | 获取应用数据路径 |
| Graphic Utils | C函数调用 | 获取屏幕信息 |
| Parameter Service | C函数调用 | 获取设备参数信息 |
| Global I18N | C函数调用 | 获取语言和地区信息 |
JS API层采用异步回调模式处理耗时操作:
// 异步任务分发流程JSIValueExecuteAsyncWork(thisVal,args,argsNum,ExecuteFunc,flag){1.验证参数有效性2.创建FuncParams参数结构3.保存thisVal和args引用4.调用JsAsyncWork::DispatchAsyncWork分发任务5.返回undefined}// 异步执行函数(在工作线程执行)voidExecuteXxx(void*data){1.解析FuncParams参数2.执行实际操作3.根据结果调用SuccessCallBack或FailCallBack4.释放资源}JS API支持三种回调:
// JS调用示例file.readText({uri:'internal://app/test.txt',success:function(data){// 成功回调console.log(data.text);},fail:function(data,code){// 失败回调console.log('Error: '+data+', Code: '+code);},complete:function(){// 完成回调(无论成功失败都会调用)}});┌─────────────────────────────────────────────────────────────────────────────┐ │ External Dependencies │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ Third Party Libraries │ │ │ │ ┌──────────────────────────┐ ┌──────────────────────────┐ │ │ │ │ │ bounds_checking_function │ │ musl │ │ │ │ │ │ (securec.h) │ │ (C Standard Library) │ │ │ │ │ │ - memset_s │ │ - malloc/free │ │ │ │ │ │ - strcpy_s │ │ - open/close/read │ │ │ │ │ │ - sprintf_s │ │ - timer_create │ │ │ │ │ └──────────────────────────┘ └──────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ commonlibrary_utils_lite │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ OpenHarmony Components │ │ │ │ │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ ability_lite │ │ ace_engine_lite│ │graphic_utils_lite│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - GetDataPath() │ │ - JSI API │ │ - Screen Info │ │ │ │ │ │ - AbilityEnv │ │ - JsAsyncWork │ │ │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ ui_lite │ │resource_mgmt_lite│ │ init │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - UI Components │ │ - Resource Mgmt │ │ - System Init │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ parameter │ │ global │ │ │ │ │ │ │ │ │ │ │ │ │ │ - GetBrand() │ │ - GLOBAL_Get │ │ │ │ │ │ - GetModel() │ │ Language() │ │ │ │ │ │ - GetDeviceType │ │ - GLOBAL_Get │ │ │ │ │ │ - GetSdkApi │ │ Region() │ │ │ │ │ │ Version() │ │ │ │ │ │ │ └─────────────────┘ └─────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘| 当前状态 | 事件/条件 | 目标状态 | 说明 |
|---|---|---|---|
| Uninitialized | KalTimerCreate() 成功 | Stopped | 创建定时器 |
| Uninitialized | KalTimerCreate() 失败 | Uninitialized | 创建失败保持原状态 |
| Stopped | KalTimerStart() 成功 | Running | 启动定时器 |
| Stopped | KalTimerDelete() | Deleted | 删除定时器 |
| Running | 单次定时器超时 | Stopped | 自动停止 |
| Running | 周期定时器超时 | Running | 保持运行,触发回调 |
| Running | KalTimerStop() | Stopped | 手动停止 |
| Running | KalTimerChange(0) | Stopped | 设置0毫秒停止 |
| Running | KalTimerChange(n) | Running | 更新定时时间 |
| Running | KalTimerDelete() | Deleted | 删除定时器 |
| Any | KalTimerDelete() | Deleted | 释放资源 |
/** * @brief 打开或创建文件 * @param path 文件路径 * @param oflag 打开标志,支持以下组合: * - O_RDONLY_FS (00): 只读 * - O_WRONLY_FS (01): 只写 * - O_RDWR_FS (02): 读写 * - O_CREAT_FS (0100): 不存在则创建 * - O_EXCL_FS (0200): 配合O_CREAT使用,文件存在则失败 * - O_TRUNC_FS (01000): 清空文件内容 * - O_APPEND_FS (02000): 追加模式 * @param mode 文件权限(当前未使用) * @return 成功返回文件描述符(>=0),失败返回-1 */intUtilsFileOpen(constchar*path,intoflag,intmode);/** * @brief 关闭文件 * @param fd 文件描述符 * @return 成功返回0,失败返回-1 */intUtilsFileClose(intfd);/** * @brief 读取文件数据 * @param fd 文件描述符 * @param buf 存储读取数据的缓冲区 * @param len 要读取的字节数 * @return 成功返回实际读取的字节数,失败返回-1 */intUtilsFileRead(intfd,char*buf,unsignedintlen);/** * @brief 写入文件数据 * @param fd 文件描述符 * @param buf 要写入的数据 * @param len 要写入的字节数 * @return 成功返回实际写入的字节数,失败返回-1 */intUtilsFileWrite(intfd,constchar*buf,unsignedintlen);/** * @brief 删除文件 * @param path 文件路径 * @attention 最多同时打开32个文件,超过则需先关闭 * @return 成功返回0,失败返回-1 */intUtilsFileDelete(constchar*path);/** * @brief 获取文件大小 * @param path 文件路径 * @param fileSize [out] 文件大小 * @return 成功返回0,失败返回-1 */intUtilsFileStat(constchar*path,unsignedint*fileSize);/** * @brief 调整文件读写位置 * @param fd 文件描述符 * @param offset 偏移量 * @param whence 起始位置: * - SEEK_SET_FS (0): 文件头 * - SEEK_CUR_FS (1): 当前位置 * - SEEK_END_FS (2): 文件尾 * @return 成功返回当前位置,失败返回-1 */intUtilsFileSeek(intfd,intoffset,unsignedintwhence);/** * @brief 复制文件 * @param src 源文件路径 * @param dest 目标文件路径 * @attention 需要两个可用的文件描述符 * @return 成功返回0,失败返回-1 */intUtilsFileCopy(constchar*src,constchar*dest);/** * @brief 移动文件 * @param src 源文件路径 * @param dest 目标文件路径 * @attention 需要两个可用的文件描述符 * @return 成功返回0,失败返回-1 */intUtilsFileMove(constchar*src,constchar*dest);/** * @brief 获取键值 * @param key 键名(最长32字节,仅支持小写字母、数字、下划线、点) * @param value [out] 值缓冲区 * @param len 缓冲区大小 * @return 成功返回值长度,参数错误返回-9,其他错误返回-1, * 从缓存获取返回0 */intUtilsGetValue(constchar*key,char*value,unsignedintlen);/** * @brief 设置键值 * @param key 键名(最长32字节) * @param value 值(最长128字节) * @return 成功返回0,参数错误返回-9,其他错误返回-1 */intUtilsSetValue(constchar*key,constchar*value);/** * @brief 删除键值 * @param key 键名 * @return 成功返回0,参数错误返回-9,其他错误返回-1 */intUtilsDeleteValue(constchar*key);/** * @brief 清空KV缓存 * @attention 仅在FEATURE_KV_CACHE启用时可用 * @return 成功返回0,失败返回-1 */intClearKVCache(void);/** * @brief 创建定时器 * @param func 回调函数 * @param type 定时器类型(KAL_TIMER_ONCE/KAL_TIMER_PERIODIC) * @param arg 回调参数 * @param millisec 定时时间(毫秒) * @return 成功返回定时器ID,失败返回NULL */KalTimerIdKalTimerCreate(KalTimerProc func,KalTimerType type,void*arg,unsignedintmillisec);/** * @brief 启动定时器 * @param timerId 定时器ID * @return KAL_OK成功,KAL_ERR_PARA参数错误 */KalErrCodeKalTimerStart(KalTimerId timerId);/** * @brief 修改定时器时间 * @param timerId 定时器ID * @param millisec 新的定时时间 * @return KAL_OK成功,KAL_ERR_PARA参数错误,KAL_ERR_INNER内部错误 */KalErrCodeKalTimerChange(KalTimerId timerId,unsignedintmillisec);/** * @brief 停止定时器 * @param timerId 定时器ID * @return KAL_OK成功,KAL_ERR_PARA参数错误,KAL_ERR_INNER内部错误 */KalErrCodeKalTimerStop(KalTimerId timerId);/** * @brief 删除定时器 * @param timerId 定时器ID * @return KAL_OK成功,KAL_ERR_PARA参数错误,KAL_ERR_INNER内部错误 */KalErrCodeKalTimerDelete(KalTimerId timerId);/** * @brief 查询定时器是否运行 * @param timerId 定时器ID * @return 1运行中,0停止或无效 */unsignedintKalTimerIsRunning(KalTimerId timerId);/** * @brief 从指定类型内存池申请内存 * @param type 内存池类型(MemType枚举) * @param size 申请大小 * @attention 不建议申请小于8字节的内存 * @return 成功返回内存地址,失败返回NULL */void*OhosMalloc(MemType type,uint32 size);/** * @brief 释放内存 * @param ptr 内存地址 * @attention 禁止释放空指针或非OhosMalloc申请的内存 */voidOhosFree(void*ptr);// 读取文本文件{uri:'internal://app/path/to/file.txt',// 文件URIposition:0,// 起始位置(可选)length:1024,// 读取长度(可选)success:function(data){},// 成功回调fail:function(data,code){},// 失败回调complete:function(){}// 完成回调}// 写入文本文件{uri:'internal://app/path/to/file.txt',text:'content to write',// 写入内容append:false,// 是否追加success:function(){},fail:function(data,code){},complete:function(){}}// 获取值{key:'my_key',// 键名default:'default_value',// 默认值(可选)success:function(data){},// data为获取的值fail:function(data,code){},complete:function(){}}// 设置值{key:'my_key',value:'my_value',// 要设置的值success:function(){},fail:function(data,code){},complete:function(){}}{brand:'HUAWEI',// 品牌manufacturer:'HUAWEI',// 制造商model:'Hi3861',// 型号product:'Hi3861',// 产品名deviceType:'liteWearable',// 设备类型language:'zh',// 语言region:'CN',// 地区apiVersion:'6',// API版本windowWidth:454,// 窗口宽度windowHeight:454,// 窗口高度screenDensity:195,// 屏幕密度screenShape:'rect'// 屏幕形状}| 错误码 | 常量名 | 说明 |
|---|---|---|
| 0 | NATIVE_SUCCESS | 成功 |
| -2 | ERROR_FR_NO_FILE | 文件不存在 |
| -39 | ERROR_DIR_NOT_EMPTY | 目录非空 |
| -200 | ERROR_CODE_GENERAL | 通用错误 |
| -202 | ERROR_CODE_PARAM | 参数错误 |
| -300 | ERROR_CODE_IO | I/O错误 |
| -301 | ERROR_CODE_NO_FILE | 文件不存在 |
| -302 | ERROR_CODE_READ_TOO_LONG | 读取内容超过4KB |
| 参数 | 默认值 | 说明 |
|---|---|---|
| FEATURE_KV_CACHE | 启用 | KV存储缓存功能开关 |
| MAX_CACHE_SIZE | 10 | KV缓存最大条目数 |
| MAX_KV_SUM | 50 | 每个应用最大KV存储条目数 |
| KEY_MAX_LEN | 32 | 键名最大长度 |
| VALUE_MAX_LEN | 128 | 值最大长度 |
| FILE_NAME_MAX_LEN | 300 | 文件名最大长度 |
| URI_NAME_MAX_LEN | 128 | URI最大长度 |
| TEXT_MAX_READ_LEN | 4096 | 单次文本读取最大长度 |
# bundle.json中的feature配置 "features": [ "utils_lite_feature_file", # 文件操作功能 "utils_lite_feature_kal_timer", # KAL定时器功能 "utils_lite_feature_timer_task", # 定时任务功能 "utils_lite_feature_js_builtin" # JS API功能 ]