class="hide-preCode-box">

2、file文件操作部件代码分析

2.1 部件的头文件

上文已经知道,file文件操作部件代码的头文件为utils\native\lite\include\utils_file.h,用户程序可以使用该头文件中定义的接口。

int UtilsFileOpen(const char* path, int oflag, int mode);

int UtilsFileClose(int fd);

int UtilsFileRead(int fd, char* buf, unsigned int len);

int UtilsFileWrite(int fd, const char* buf, unsigned int len);

int UtilsFileDelete(const char* path);

int UtilsFileStat(const char* path, unsigned int* fileSize);

int UtilsFileSeek(int fd, int offset, unsigned int whence);

int UtilsFileCopy(const char* src, const char* dest);

int UtilsFileMove(const char* src, const char* dest);

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

头文件utils\native\lite\hals\file\hal_file.h中定义的接口,需要移植适配时提供实现,具体接口见上文。

2.2 部件的源代码文件

文件utils\native\lite\file\src\file_impl_hal\file.c中实现了UtilsFileXXX接口,代码比较简单,调用需要开发板移植适配的HalFileXXX接口。

int UtilsFileOpen(const char* path, int oflag, int mode)
{
    return HalFileOpen(path, oflag, mode);
}

int UtilsFileClose(int fd)
{
    return HalFileClose(fd);
}

int UtilsFileRead(int fd, char* buf, unsigned int len)
{
    return HalFileRead(fd, buf, len);
}

int UtilsFileWrite(int fd, const char* buf, unsigned int len)
{
    return HalFileWrite(fd, buf, len);
}

int UtilsFileDelete(const char* path)
{
    return HalFileDelete(path);
}

int UtilsFileStat(const char* path, unsigned int* fileSize)
{
    return HalFileStat(path, fileSize);
}

int UtilsFileSeek(int fd, int offset, unsigned int whence)
{
    return HalFileSeek(fd, offset, whence);
}

int UtilsFileCopy(const char* src, const char* dest)
{
    if ((src == NULL) || (dest == NULL)) {
        return EC_FAILURE;
    }
    int fpSrc = UtilsFileOpen(src, O_RDONLY_FS, 0);
    if (fpSrc < 0) {
        return fpSrc;
    }
    int fpDest = UtilsFileOpen(dest, O_RDWR_FS | O_CREAT_FS | O_TRUNC_FS, 0);
    if (fpDest < 0) {
        UtilsFileClose(fpSrc);
        return fpDest;
    }
    bool copyFailed = true;
    char* dataBuf = (char *)malloc(BUFFER_SIZE);
    if (dataBuf == NULL) {
        goto MALLOC_ERROR;
    }
    int nLen = UtilsFileRead(fpSrc, dataBuf, BUFFER_SIZE);
    while (nLen > 0) {
        if (UtilsFileWrite(fpDest, dataBuf, nLen) != nLen) {
            goto EXIT;
        }
        nLen = UtilsFileRead(fpSrc, dataBuf, BUFFER_SIZE);
    }
    copyFailed = (nLen < 0);

EXIT:
    free(dataBuf);
MALLOC_ERROR:
    UtilsFileClose(fpSrc);
    UtilsFileClose(fpDest);
    if (copyFailed) {
        UtilsFileDelete(dest);
        return EC_FAILURE;
    }
    return EC_SUCCESS;
}

int UtilsFileMove(const char* src, const char* dest)
{
    int ret = UtilsFileCopy(src, dest);
    if (ret == EC_SUCCESS) {
        ret = UtilsFileDelete(src);
    }
    return ret;
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

2.3 部件的编译构建

编译构建配置文件utils\native\lite\file\BUILD.gn代码如下,⑴处的配置项ohos_board_adapter_dir为产品解决方案配置文件config.json中定义的开发板适配目录。可以看出来:

  import("//build/lite/config/component/lite_component.gni")

  static_library("native_file") {
    sources = [ "src/file_impl_hal/file.c" ]
    include_dirs = [
      "//utils/native/lite/include",
      "//utils/native/lite/hals/file",
    ]
⑴  deps = [ "$ohos_board_adapter_dir/hals/utils/file:hal_file_static" ]
  }

  lite_component("file") {
    features = [ ":native_file" ]
  }

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

小结

本文介绍了utils子系统之file文件操作部件的移植适配案例,分析了部件源代码。

如果大家想更加深入的学习 OpenHarmony 开发的内容,不妨可以参考以下相关学习文档进行学习,助你快速提升自己:

OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源码解析》:https://qr18.cn/CgxrRy

系统架构分析:https://qr18.cn/CgxrRy

OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy

在这里插入图片描述

OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy

写在最后

data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/maniuT/article/details/139775676","extend1":"pc","ab":"new"}">>
注:本文转载自blog.csdn.net的沧海一笑-dj的文章"https://blog.csdn.net/dengjin20104042056/article/details/96207130"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!