fileops
fileops 提供文件操作抽象接口,支持文件的打开、关闭、读写、同步、定位、删除与截断等操作,兼容 linux、liteos、seliteos 和 freertos 系统。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| 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
头文件清单
功能说明
- 打开指定路径的文件,根据传入的标志位和模式创建或访问文件
- 返回文件指针用于后续文件操作,打开失败时返回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或文件打开失败 |
参考案例
src/middleware/services/vdec/drv/vfmw/vfmw_v7.0/osal/liteos/liteos_osal.c#osal_klib_fopensrc/middleware/services/srv_tiot_host/tiot_driver/common/utils/fileops/tiot_fileops.c#osal_klib_fopen
osal_klib_fclose
头文件清单
功能说明
- 关闭由 osal_klib_fopen 打开的文件,释放文件指针占用的内存资源
- 关闭后文件指针不可再用于其他文件操作
- 传入NULL指针时函数直接返回,不执行关闭操作
前置条件
- 调用时序约束:当前接口必须在 osal_klib_fopen 成功返回后调用
- 依赖关系:filp 为 osal_klib_fopen 返回的有效文件指针
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| filp | void * | 由 osal_klib_fopen 返回的文件指针 | 不为NULL |
osal_klib_fwrite
头文件清单
功能说明
- 将缓冲区中的数据写入到已打开的文件中
- 返回实际写入的字节数,写入失败时返回 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
头文件清单
功能说明
- 从已打开的文件中读取数据到缓冲区
- 返回实际读取的字节数,读取失败时返回 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 |
参考案例
src/middleware/services/vdec/drv/vfmw/vfmw_v7.0/osal/liteos/liteos_osal.c#osal_klib_freadsrc/middleware/services/srv_tiot_host/tiot_driver/common/utils/fileops/tiot_fileops.c#osal_klib_fread
osal_klib_fsync
头文件清单
功能说明
- 将文件缓存数据同步写入存储设备,确保数据持久化
- 传入NULL指针时函数直接返回,不执行同步操作
- 支持 linux 和 liteos 系统
前置条件
- filp 为 osal_klib_fopen 返回的有效文件指针
- 文件以可写方式打开
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| filp | void * | 由 osal_klib_fopen 返回的文件指针 | 不为NULL |
参考案例
osal_klib_fseek
头文件清单
功能说明
- 设置文件读写位置的偏移量,根据 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 类型 |
参考案例
src/middleware/services/vdec/drv/vfmw/vfmw_v7.0/osal/liteos/liteos_osal.c#osal_klib_fseeksrc/middleware/services/srv_tiot_host/tiot_driver/common/utils/fileops/tiot_fileops.c#osal_klib_fseek
osal_klib_unlink
头文件清单
功能说明
- 删除指定路径的文件或目录
- 删除目录时,目录必须为空
- 返回值为0表示成功,非0表示失败
- 仅支持 seliteos 系统
前置条件
- 路径字符串有效且可访问
- 删除目录时,目录必须为空
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| path | const char * | 待删除的文件或目录路径 | 不为NULL |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 删除成功 | 文件或空目录删除成功 |
| 非0 | 删除失败 | 路径无效、文件不存在或目录非空 |
osal_klib_ftruncate
头文件清单
功能说明
- 将文件大小截断到指定长度
- 若指定长度小于当前文件大小,超出部分数据被丢弃
- 若指定长度大于当前文件大小,文件扩展并在扩展区域填充零
- 返回值为0表示成功,非0表示失败
- 仅支持 seliteos 系统
前置条件
- filp 为 osal_klib_fopen 返回的有效文件指针
- 文件以可写方式打开
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| filp | void * | 由 osal_klib_fopen 返回的文件指针 | 不为NULL |
| len | unsigned long | 截断后的目标文件大小 | 大于等于0 |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 截断成功 | 文件大小截断到指定长度 |
| 非0 | 截断失败 | 参数无效或截断操作失败 |