1# 公共基础库开发指导<a name="ZH-CN_TOPIC_0000001059307279"></a> 2 3- [接口说明](#section1633115419401) 4- [开发步骤](#section17450172710292) 5 - [LiteOS-A内核\(Hi3516、Hi3518平台\)KV存储的native应用开发步骤:](#section258354119295) 6 - [Dump系统属性在LiteOS-M内核平台使用指南:](#section9179161863014) 7 - [Dump系统属性在LiteOS-A内核平台使用指南:](#section3179121853017) 8 9 10## 接口说明<a name="section1633115419401"></a> 11 12**表 1** 文件操作接口说明 13 14<a name="table1171894475019"></a> 15<table><thead align="left"><tr id="row1471814441508"><th class="cellrowborder" valign="top" width="45.65%" id="mcps1.2.3.1.1"><p id="p11718174425016"><a name="p11718174425016"></a><a name="p11718174425016"></a>接口名</p> 16</th> 17<th class="cellrowborder" valign="top" width="54.35%" id="mcps1.2.3.1.2"><p id="p6718124475013"><a name="p6718124475013"></a><a name="p6718124475013"></a>描述</p> 18</th> 19</tr> 20</thead> 21<tbody><tr id="row671818445506"><td class="cellrowborder" valign="top" width="45.65%" headers="mcps1.2.3.1.1 "><p id="p871814441501"><a name="p871814441501"></a><a name="p871814441501"></a>int UtilsFileOpen(const char* path, int oflag, int mode)</p> 22</td> 23<td class="cellrowborder" valign="top" width="54.35%" headers="mcps1.2.3.1.2 "><p id="p127181444165016"><a name="p127181444165016"></a><a name="p127181444165016"></a>打开或创建文件</p> 24</td> 25</tr> 26<tr id="row1171874420507"><td class="cellrowborder" valign="top" width="45.65%" headers="mcps1.2.3.1.1 "><p id="p1671884419509"><a name="p1671884419509"></a><a name="p1671884419509"></a>int UtilsFileClose(int fd)</p> 27</td> 28<td class="cellrowborder" valign="top" width="54.35%" headers="mcps1.2.3.1.2 "><p id="p1071884416504"><a name="p1071884416504"></a><a name="p1071884416504"></a>关闭文件</p> 29</td> 30</tr> 31<tr id="row6718744105017"><td class="cellrowborder" valign="top" width="45.65%" headers="mcps1.2.3.1.1 "><p id="p137181644145015"><a name="p137181644145015"></a><a name="p137181644145015"></a>int UtilsFileRead(int fd, char *buf, unsigned int len)</p> 32</td> 33<td class="cellrowborder" valign="top" width="54.35%" headers="mcps1.2.3.1.2 "><p id="p1171854410509"><a name="p1171854410509"></a><a name="p1171854410509"></a>读取特定长度的文件数据</p> 34</td> 35</tr> 36<tr id="row2071817440509"><td class="cellrowborder" valign="top" width="45.65%" headers="mcps1.2.3.1.1 "><p id="p17718144465012"><a name="p17718144465012"></a><a name="p17718144465012"></a>int UtilsFileWrite(int fd, const char *buf, unsigned int len)</p> 37</td> 38<td class="cellrowborder" valign="top" width="54.35%" headers="mcps1.2.3.1.2 "><p id="p67191444145012"><a name="p67191444145012"></a><a name="p67191444145012"></a>向文件写入特定大小的数据</p> 39</td> 40</tr> 41<tr id="row471974425019"><td class="cellrowborder" valign="top" width="45.65%" headers="mcps1.2.3.1.1 "><p id="p11719174475016"><a name="p11719174475016"></a><a name="p11719174475016"></a>int UtilsFileDelete(const char *path)</p> 42</td> 43<td class="cellrowborder" valign="top" width="54.35%" headers="mcps1.2.3.1.2 "><p id="p2071919446507"><a name="p2071919446507"></a><a name="p2071919446507"></a>删除指定文件</p> 44</td> 45</tr> 46<tr id="row1071964425013"><td class="cellrowborder" valign="top" width="45.65%" headers="mcps1.2.3.1.1 "><p id="p20719114405010"><a name="p20719114405010"></a><a name="p20719114405010"></a>int UtilsFileStat(const char *path, unsigned int *fileSize)</p> 47</td> 48<td class="cellrowborder" valign="top" width="54.35%" headers="mcps1.2.3.1.2 "><p id="p8719144435015"><a name="p8719144435015"></a><a name="p8719144435015"></a>获取文件大小</p> 49</td> 50</tr> 51<tr id="row2071924417504"><td class="cellrowborder" valign="top" width="45.65%" headers="mcps1.2.3.1.1 "><p id="p57193447501"><a name="p57193447501"></a><a name="p57193447501"></a>int UtilsFileSeek(int fd, int offset, unsigned int whence)</p> 52</td> 53<td class="cellrowborder" valign="top" width="54.35%" headers="mcps1.2.3.1.2 "><p id="p1071934495014"><a name="p1071934495014"></a><a name="p1071934495014"></a>重新定位文件读/写偏移量</p> 54</td> 55</tr> 56<tr id="row1135017417557"><td class="cellrowborder" valign="top" width="45.65%" headers="mcps1.2.3.1.1 "><p id="p2350184112554"><a name="p2350184112554"></a><a name="p2350184112554"></a>int UtilsFileCopy(const char* src, const char* dest)</p> 57</td> 58<td class="cellrowborder" valign="top" width="54.35%" headers="mcps1.2.3.1.2 "><p id="p113501041155511"><a name="p113501041155511"></a><a name="p113501041155511"></a>将源文件复制一份并存储到目标文件</p> 59</td> 60</tr> 61<tr id="row11216645145517"><td class="cellrowborder" valign="top" width="45.65%" headers="mcps1.2.3.1.1 "><p id="p192171345105519"><a name="p192171345105519"></a><a name="p192171345105519"></a>int UtilsFileMove(const char* src, const char* dest)</p> 62</td> 63<td class="cellrowborder" valign="top" width="54.35%" headers="mcps1.2.3.1.2 "><p id="p921744595517"><a name="p921744595517"></a><a name="p921744595517"></a>将源文件移动到指定目标文件</p> 64</td> 65</tr> 66</tbody> 67</table> 68 69文件操作使用示例: 70 71``` 72// open && write 73char fileName[] = "testfile"; 74static const char def[] = "utils_file_operation implement."; 75int fd = UtilsFileOpen(fileName, O_RDWR_FS | O_CREAT_FS | O_TRUNC_FS, 0); 76printf("file handle = %d\n", fd); 77int ret = UtilsFileWrite(fd, def, strlen(def)); 78printf("write ret = %d\n", ret); 79 80// seek 81ret = UtilsFileSeek(fd, 5, SEEK_SET_FS); 82printf("lseek ret = %d\n", ret); 83 84// read && close 85char buf[64] = {0}; 86int readLen = UtilsFileRead(fd, buf, 64); 87ret = UtilsFileClose(fd); 88printf("read len = %d : buf = %s\n", readLen, buf); 89 90// stat 91int fileLen = 0; 92ret = UtilsFileStat(fileName, &fileLen); 93printf("file size = %d\n", fileLen); 94 95// delete 96ret = UtilsFileDelete(fileName); 97printf("delete ret = %d\n", ret); 98``` 99 100**表 2** KV存储接口说明 101 102<a name="table1731550155318"></a> 103<table><thead align="left"><tr id="row4419501537"><th class="cellrowborder" valign="top" width="57.38999999999999%" id="mcps1.2.3.1.1"><p id="p54150165315"><a name="p54150165315"></a><a name="p54150165315"></a>接口名</p> 104</th> 105<th class="cellrowborder" valign="top" width="42.61%" id="mcps1.2.3.1.2"><p id="p941150145313"><a name="p941150145313"></a><a name="p941150145313"></a>描述</p> 106</th> 107</tr> 108</thead> 109<tbody><tr id="row34145016535"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p980953910190"><a name="p980953910190"></a><a name="p980953910190"></a>int UtilsGetValue(const char* key, char* value, unsigned int len)</p> 110</td> 111<td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p13562171015712"><a name="p13562171015712"></a><a name="p13562171015712"></a>提供给上层应用根据key获取对应数据项</p> 112</td> 113</tr> 114<tr id="row1746172917474"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p242913617818"><a name="p242913617818"></a><a name="p242913617818"></a>int UtilsSetValue(const char* key, const char* value)</p> 115</td> 116<td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p2431455765"><a name="p2431455765"></a><a name="p2431455765"></a>提供给上层应用用于存储/更新key对应数据项</p> 117</td> 118</tr> 119<tr id="row10992232154714"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p118151439111910"><a name="p118151439111910"></a><a name="p118151439111910"></a>int UtilsDeleteValue(const char* key)</p> 120</td> 121<td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p126575774517"><a name="p126575774517"></a><a name="p126575774517"></a>提供给上层应用删除key对应数据项</p> 122</td> 123</tr> 124</tbody> 125</table> 126 127KV存储使用示例: 128 129``` 130// set 131char key[] = "rw.sys.version_100"; 132char value[] = "Hello kv operation implement!"; 133int ret = UtilsSetValue(key, value); 134printf("UtilsSetValue set ret = %d\n", ret); 135 136// get 137char temp[128] = {0}; 138ret = UtilsGetValue(key, temp, 128); 139printf("UtilsGetValue get ret = %d, temp = %s\n", ret, temp); 140 141// delete 142ret = UtilsDeleteValue(key); 143printf("UtilsDeleteValue delete ret = %d\n", ret); 144``` 145 146<a name="table15992315220"></a> 147<table><thead align="left"></thead> 148<tbody></tbody> 149</table> 150 151## 开发步骤<a name="section17450172710292"></a> 152 153### LiteOS-A内核\(Hi3516、Hi3518平台\)KV存储的native应用开发步骤:<a name="section258354119295"></a> 154 1551. 基于AbilityKit开发KV存储的native应用。 156 - 基于KV存储提供的接口编写用户程序,并编译出so(libLauncher.so)文件。 157 158 ``` 159 // set 160 char key[] = "rw.sys.version_100"; 161 char value[] = "Hello kv operation implement!"; 162 int ret = UtilsSetValue(key, value); 163 printf("UtilsSetValue set ret = %d\n", ret); 164 165 // get 166 char temp[128] = {0}; 167 ret = UtilsGetValue(key, temp, 128); 168 printf("UtilsGetValue get ret = %d, temp = %s\n", ret, temp); 169 170 // delete 171 ret = UtilsDeleteValue(key); 172 printf("UtilsDeleteValue delete ret = %d\n", ret); 173 ``` 174 175 - 编写config.json文件,内容如下: 176 177 ``` 178 { 179 "app": { 180 "bundleName": "com.example.launcher", 181 "vendor": "example", 182 "version": { 183 "code": 1, 184 "name": "1.0" 185 } 186 }, 187 "deviceConfig": { 188 "default": { 189 "reqSdk": { 190 "compatible": "zsdk 1.0.0", 191 "target": "zsdk 1.0.1" 192 }, 193 "keepAlive": false 194 }, 195 "smartCamera": { 196 "reqSdk": { 197 "compatible": "zsdk 1.0.0", 198 "target": "zsdk 1.0.1" 199 }, 200 "keepAlive": false 201 } 202 }, 203 "module": { 204 "package": "com.example.launcher", 205 "name": ".MyHarmonyAbilityPackage", 206 "deviceType": [ 207 "phone", "tv","tablet", "pc","car","smartWatch","sportsWatch","smartCamera" 208 ], 209 "distro": { 210 "deliveryWithInstall": true, 211 "moduleName": "Launcher", 212 "moduleType": "entry" 213 }, 214 "abilities": [{ 215 "name": "MainAbility", 216 "icon": "res/drawable/phone.png", 217 "label": "test app 1", 218 "launchType": "standard", 219 "type": "page" 220 }, 221 { 222 "name": "SecondAbility", 223 "icon": "res/drawable/phone.png", 224 "label": "test app 2", 225 "launchType": "standard", 226 "type": "page" 227 }, 228 { 229 "name": "ServiceAbility", 230 "icon": "res/drawable/phone.png", 231 "label": "test app 2", 232 "launchType": "standard", 233 "type": "service" 234 } 235 ] 236 } 237 } 238 ``` 239 240 - 生成hap包。 241 242 - 按照如下目录结构存放文件,res/drawable下面放置资源文件: 243 244  245 246 - 将上述文件打包生成zip包,修改后缀为.hap,例如Launcher.hap 247 2482. 连接单板,通过串口向单板发送安装KV存储native应用的命令。 249 250 ``` 251 ./nfs/dev_tools/bin/bm install -p /nfs/Launcher.hap 252 ``` 253 2543. 通过串口向单板发送运行KV存储native应用的命令。 255 256 ``` 257 ./nfs/dev_tools/bin/aa start -p com.example.launcher -n ServiceAbility 258 ``` 259 260 261### Dump系统属性在LiteOS-M内核平台使用指南:<a name="section9179161863014"></a> 262 2631. 连接单板,通过串口向单板发送AT+SYSPARA命令。 264 265 ``` 266 AT+SYSPARA 267 ``` 268 269 **图 1** LiteOS-M平台dump系统属性输出<a name="fig15179161863016"></a> 270  271 272 273### Dump系统属性在LiteOS-A内核平台使用指南:<a name="section3179121853017"></a> 274 2751. 连接单板,运行bin路径下的os\_dump加参数--help,查看os\_dump使用指导。 276 277 ``` 278 ./bin/os_dump --help 279 ``` 280 2812. os\_dump加参数-l,查看当前系统有哪些模块支持获取属性。 282 283 ``` 284 ./bin/os_dump -l 285 ``` 286 2873. os\_dump加参数syspara,查看当前系统属性 288 289 ``` 290 ./bin/os_dump syspara 291 ``` 292 293 **图 2** LiteOS-A平台dump系统属性输出<a name="fig2179718143018"></a> 294  295 296 297