跳转至

fileops

fileops 提供文件操作抽象接口,支持文件的打开、关闭、读写、同步、定位、删除与截断等操作,兼容 linux、liteos、seliteos 和 freertos 系统。

头文件清单

#include "include/osal/fileops/osal_fileops.h"

接口清单

接口名称 功能简述
osal_klib_fopen 打开文件并返回文件指针
osal_klib_fclose 关闭已打开的文件
osal_klib_fwrite 向文件写入数据
osal_klib_fread 从文件读取数据
osal_klib_fsync 将文件数据同步到存储设备
osal_klib_fseek 设置文件读写位置偏移
osal_klib_unlink 删除文件或空目录
osal_klib_ftruncate 截断文件到指定大小

Functions

osal_klib_fopen

void *osal_klib_fopen(const char *file, int flags, int mode)

头文件清单

#include "include/osal/fileops/osal_fileops.h"

功能说明

  • 打开指定路径的文件,根据传入的标志位和模式创建或访问文件
  • 返回文件指针用于后续文件操作,打开失败时返回NULL
  • 文件指针的生命周期由 osal_klib_fclose 管理释放

前置条件

  • 文件路径字符串有效且可访问
  • 文件系统已初始化并可用

入参

名称 参数类型 详细说明 约束取值范围
file const char * 文件路径字符串 不为NULL
flags int 文件打开标志位,控制文件的打开方式 OSAL_O_RDONLY(0) / OSAL_O_WRONLY(1) / OSAL_O_RDWR(2) / OSAL_O_CREAT(64) / OSAL_O_EXCL(128) / OSAL_O_TRUNC(512) / OSAL_O_APPEND(1024) / OSAL_O_CLOEXEC(524288)
mode int 文件创建模式 OSAL_O_RDONLY(0) / OSAL_O_WRONLY(1) / OSAL_O_RDWR(2)

返回值

  • 返回类型:void *
返回值 文字含义 触发场景
非NULL指针 文件打开成功 文件路径有效且打开操作成功
NULL 文件打开失败 文件路径为NULL或文件打开失败

参考案例

osal_klib_fclose

void osal_klib_fclose(void *filp)

头文件清单

#include "include/osal/fileops/osal_fileops.h"

功能说明

  • 关闭由 osal_klib_fopen 打开的文件,释放文件指针占用的内存资源
  • 关闭后文件指针不可再用于其他文件操作
  • 传入NULL指针时函数直接返回,不执行关闭操作

前置条件

  • 调用时序约束:当前接口必须在 osal_klib_fopen 成功返回后调用
  • 依赖关系:filp 为 osal_klib_fopen 返回的有效文件指针

入参

名称 参数类型 详细说明 约束取值范围
filp void * 由 osal_klib_fopen 返回的文件指针 不为NULL

osal_klib_fwrite

int osal_klib_fwrite(const char *buf, unsigned long size, void *filp)

头文件清单

#include "include/osal/fileops/osal_fileops.h"

功能说明

  • 将缓冲区中的数据写入到已打开的文件中
  • 返回实际写入的字节数,写入失败时返回 OSAL_FAILURE(-1)
  • 文件写入位置由文件当前偏移决定

前置条件

  • filp 为 osal_klib_fopen 返回的有效文件指针
  • 文件以可写方式打开(OSAL_O_WRONLY 或 OSAL_O_RDWR)

入参

名称 参数类型 详细说明 约束取值范围
buf const char * 待写入数据的缓冲区 不为NULL
size unsigned long 待写入数据的字节数 大于0
filp void * 由 osal_klib_fopen 返回的文件指针 不为NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
>0 实际写入的字节数 写入成功
OSAL_FAILURE(-1) 写入失败 filp 为 NULL 或 buf 为 NULL

参考案例

osal_klib_fread

int osal_klib_fread(char *buf, unsigned long size, void *filp)

头文件清单

#include "include/osal/fileops/osal_fileops.h"

功能说明

  • 从已打开的文件中读取数据到缓冲区
  • 返回实际读取的字节数,读取失败时返回 OSAL_FAILURE(-1)
  • 文件读取位置由文件当前偏移决定

前置条件

  • filp 为 osal_klib_fopen 返回的有效文件指针
  • 文件以可读方式打开(OSAL_O_RDONLY 或 OSAL_O_RDWR)

入参

名称 参数类型 详细说明 约束取值范围
size unsigned long 待读取数据的字节数 大于0
filp void * 由 osal_klib_fopen 返回的文件指针 不为NULL

出参

名称 数据类型 输出说明
buf char * 存储读取数据的缓冲区,由调用方分配内存,长度不小于 size

返回值

  • 返回类型:int
返回值 文字含义 触发场景
>0 实际读取的字节数 读取成功
OSAL_FAILURE(-1) 读取失败 filp 为 NULL 或 buf 为 NULL

参考案例

osal_klib_fsync

void osal_klib_fsync(void *filp)

头文件清单

#include "include/osal/fileops/osal_fileops.h"

功能说明

  • 将文件缓存数据同步写入存储设备,确保数据持久化
  • 传入NULL指针时函数直接返回,不执行同步操作
  • 支持 linux 和 liteos 系统

前置条件

  • filp 为 osal_klib_fopen 返回的有效文件指针
  • 文件以可写方式打开

入参

名称 参数类型 详细说明 约束取值范围
filp void * 由 osal_klib_fopen 返回的文件指针 不为NULL

参考案例

osal_klib_fseek

int osal_klib_fseek(long long offset, int whence, void *filp)

头文件清单

#include "include/osal/fileops/osal_fileops.h"

功能说明

  • 设置文件读写位置的偏移量,根据 whence 参数确定偏移起始位置
  • 返回值为0表示成功,返回 OSAL_FAILURE(-1) 表示参数无效,返回 OSAL_EOVERFLOW(-75) 表示偏移结果溢出
  • offset 不得超过 INT32_MAX

前置条件

  • 调用时序约束:当前接口必须在 osal_klib_fopen 成功返回后调用
  • 依赖关系:filp 为 osal_klib_fopen 返回的有效文件指针

入参

名称 参数类型 详细说明 约束取值范围
offset long long 偏移量 0 ~ INT32_MAX
whence int 偏移起始位置 OSAL_SEEK_SET(0) / OSAL_SEEK_CUR(1) / OSAL_SEEK_END(2)
filp void * 由 osal_klib_fopen 返回的文件指针 不为NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
0 定位成功 参数合法,文件偏移设置成功
OSAL_FAILURE(-1) 参数无效 filp 为 NULL 或 offset 超过 INT32_MAX
OSAL_EOVERFLOW(-75) 偏移结果溢出 lseek 返回值无法转换为 int 类型

参考案例

int osal_klib_unlink(const char *path)

头文件清单

#include "include/osal/fileops/osal_fileops.h"

功能说明

  • 删除指定路径的文件或目录
  • 删除目录时,目录必须为空
  • 返回值为0表示成功,非0表示失败
  • 仅支持 seliteos 系统

前置条件

  • 路径字符串有效且可访问
  • 删除目录时,目录必须为空

入参

名称 参数类型 详细说明 约束取值范围
path const char * 待删除的文件或目录路径 不为NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
0 删除成功 文件或空目录删除成功
非0 删除失败 路径无效、文件不存在或目录非空

osal_klib_ftruncate

int osal_klib_ftruncate(void *filp, unsigned long len)

头文件清单

#include "include/osal/fileops/osal_fileops.h"

功能说明

  • 将文件大小截断到指定长度
  • 若指定长度小于当前文件大小,超出部分数据被丢弃
  • 若指定长度大于当前文件大小,文件扩展并在扩展区域填充零
  • 返回值为0表示成功,非0表示失败
  • 仅支持 seliteos 系统

前置条件

  • filp 为 osal_klib_fopen 返回的有效文件指针
  • 文件以可写方式打开

入参

名称 参数类型 详细说明 约束取值范围
filp void * 由 osal_klib_fopen 返回的文件指针 不为NULL
len unsigned long 截断后的目标文件大小 大于等于0

返回值

  • 返回类型:int
返回值 文字含义 触发场景
0 截断成功 文件大小截断到指定长度
非0 截断失败 参数无效或截断操作失败

Macros

OSAL_O_RDONLY

#define OSAL_O_RDONLY 00000000

OSAL_O_WRONLY

#define OSAL_O_WRONLY 00000001

OSAL_O_RDWR

#define OSAL_O_RDWR 00000002

OSAL_O_CREAT

#define OSAL_O_CREAT 00000100

OSAL_O_EXCL

#define OSAL_O_EXCL 00000200

OSAL_O_TRUNC

#define OSAL_O_TRUNC 00001000

OSAL_O_APPEND

#define OSAL_O_APPEND 00002000

OSAL_O_CLOEXEC

#define OSAL_O_CLOEXEC 02000000

OSAL_SEEK_SET

#define OSAL_SEEK_SET 0

OSAL_SEEK_CUR

#define OSAL_SEEK_CUR 1

OSAL_SEEK_END

#define OSAL_SEEK_END 2

OSAL_FAILURE

#define OSAL_FAILURE (-1)

OSAL_EOVERFLOW

#define OSAL_EOVERFLOW (-75)