文件系统¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
功能概述¶
文件系统是指文件和对文件进行操作和管理的软件的集合。文件系统实现了存储空间管理、构造文件结构、提供访问文件的操作接口。使用文件系统存储方式可以方便进行文件的增、删、查、改。
本章主要介绍UniRTOS虚拟文件系统(VFS)的功能特性、API使用方法及典型应用示例,旨在帮助开发者快速掌握文件系统操作能力的集成与调试,确保设备在各种存储介质和平台下稳定可靠运行。
VFS¶
VFS(Virtual File System,虚拟文件系统)是操作系统中承上启下的关键抽象层——它对上层应用提供统一的POSIX风格文件操作接口(open/read/write/close等),对下层屏蔽不同文件系统实现的差异。各存储分区(如 /user、/fota、/data)在系统启动阶段已由平台完成挂载,应用代码只需使用标准路径即可操作文件,无需关心底层是何种存储介质。UniRTOS的VFS实现由 qosa_vfs 系列接口承载,是文件系统栈的核心枢纽。
UniRTOS VFS的核心能力¶
UniRTOS VFS的核心能力包括:
统一文件操作:提供 open/close/read/write/lseek/stat/truncate 等标准POSIX语义接口,应用层使用系统路径(如 /user/config.json)访问已挂载分区中的文件,降低有嵌入式Linux开发经验者的学习成本;
完整目录管理:支持目录的创建、删除、遍历、递归操作,以及工作目录切换和路径规范化;
文件系统信息查询:获取挂载点列表、文件系统容量、剩余空间、块大小等统计信息,为存储空间监控和预警提供数据基础;
运行时挂载管理:支持文件系统的运行时卸载和只读重新挂载,满足FOTA升级、安全模式切换等动态场景需求。
典型高频应用场景¶
典型高频应用场景包括:
配置文件管理:设备首次上电时通过 qosa_vfs_open() 检查配置文件是否存在,不存在则创建默认配置;运行期间通过 qosa_vfs_read() 和 qosa_vfs_write() 读写配置参数;
日志文件记录:通过 qosa_vfs_open() 创建日志文件,配合 qosa_vfs_lseek() 和 qosa_vfs_ftruncate() 实现按大小滚动覆写,避免日志文件无限增长耗尽存储空间;
FOTA升级流程:通过 qosa_vfs_statvfs() 校验FOTA分区容量,使用辅助函数 qosa_vfs_file_write() 将固件包一次性写入,升级后卸载旧分区重新挂载新固件;
存储空间监控:定期调用 qosa_vfs_statvfs() 或 qosa_vfs_dir_total_size() 查询存储使用情况,低于阈值时触发清理策略或上报告警;
工厂文件保护:利用 qosa_vfs_remount() 将配置分区切换为只读模式,防止运行期间误写关键出厂参数。
文件系统API¶
头文件¶
qosa_virtual_file.h
函数概览¶
文件操作¶
函数 |
说明 |
|---|---|
qosa_vfs_creat() |
创建文件 |
qosa_vfs_open() |
打开文件(可创建) |
qosa_vfs_close() |
关闭文件描述符 |
qosa_vfs_read() |
读取文件数据 |
qosa_vfs_write() |
写入文件数据 |
qosa_vfs_lseek() |
设置文件读写偏移 |
qosa_vfs_fstat() |
通过文件描述符获取文件状态 |
qosa_vfs_stat() |
通过文件路径获取文件状态 |
qosa_vfs_truncate() |
通过路径截断文件到指定长度 |
qosa_vfs_ftruncate() |
通过文件描述符截断文件到指定长度 |
qosa_vfs_unlink() |
删除文件 |
qosa_vfs_rename() |
重命名或移动文件 |
qosa_vfs_fsync() |
将文件数据同步到存储设备 |
qosa_vfs_file_size() |
获取文件大小(辅助函数) |
qosa_vfs_file_read() |
一次性读取文件(辅助函数) |
qosa_vfs_file_write() |
一次性写入文件(辅助函数) |
目录操作¶
函数 |
说明 |
|---|---|
qosa_vfs_mkdir() |
创建目录 |
qosa_vfs_rmdir() |
删除空目录 |
qosa_vfs_opendir() |
打开目录流 |
qosa_vfs_readdir() |
读取目录条目 |
qosa_vfs_readdir_r() |
读取目录条目(线程安全版本) |
qosa_vfs_closedir() |
关闭目录流 |
qosa_vfs_telldir() |
获取目录流当前位置 |
qosa_vfs_seekdir() |
设置目录流读取位置 |
qosa_vfs_rewinddir() |
重置目录流到起始位置 |
qosa_vfs_mkpath() |
递归创建多级目录 |
qosa_vfs_mkfilepath() |
递归创建文件所在目录 |
qosa_vfs_rmchildren() |
删除目录下所有子文件和子目录 |
qosa_vfs_rmdir_recursive() |
递归删除目录及其内容 |
qosa_vfs_chdir() |
切换工作目录 |
qosa_vfs_getcwd() |
获取当前工作目录 |
文件系统管理¶
函数 |
说明 |
|---|---|
qosa_vfs_statvfs() |
通过路径获取文件系统统计信息 |
qosa_vfs_fstatvfs() |
通过文件描述符获取文件系统统计信息 |
qosa_vfs_mount_count() |
获取已挂载文件系统数量 |
qosa_vfs_mount_points() |
获取已挂载文件系统挂载点列表 |
qosa_vfs_umount() |
卸载文件系统 |
qosa_vfs_remount() |
重新挂载文件系统 |
qosa_vfs_umount_all() |
卸载所有已挂载文件系统 |
qosa_vfs_dir_total_size() |
获取目录下文件总大小 |
qosa_vfs_realpath() |
获取规范化绝对路径 |
qosa_vfs_sync() |
将文件系统缓冲区数据刷入磁盘 |
函数详解¶
qosa_vfs_creat¶
功能描述
创建文件,等效于以 QOSA_VFS_O_WRONLY | QOSA_VFS_O_CREAT | QOSA_VFS_O_TRUNC 方式打开文件。函数原型
qosa_int32_t qosa_vfs_creat(const char *path, qosa_int32_t mode)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
文件路径;必须为绝对路径 |
mode |
输入 |
qosa_int32_t |
文件权限模式 |
返回值说明
非负值:函数执行成功,返回文件描述符
-1:函数执行失败
qosa_vfs_open¶
功能描述
打开文件,支持创建不存在的文件。函数原型
qosa_int32_t qosa_vfs_open(const char *path, qosa_int32_t flags)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
文件路径;必须为绝对路径 |
flags |
输入 |
qosa_int32_t |
文件打开标志;支持 QOSA_VFS_O_RDONLY、QOSA_VFS_O_WRONLY、QOSA_VFS_O_RDWR 等,可与 QOSA_VFS_O_CREAT、QOSA_VFS_O_TRUNC 等标志按位或组合;详见 文件打开标志 |
返回值说明
非负值:函数执行成功,返回文件描述符
-1:函数执行失败
qosa_vfs_close¶
功能描述
关闭已打开的文件描述符,释放相关资源。函数原型
qosa_int32_t qosa_vfs_close(qosa_int32_t fd)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
fd |
输入 |
qosa_int32_t |
待关闭的文件描述符 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_read¶
功能描述
从已打开的文件描述符中读取数据。函数原型
qosa_ssize_t qosa_vfs_read(qosa_int32_t fd, void *buf, qosa_size_t count)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
fd |
输入 |
qosa_int32_t |
文件描述符 |
buf |
输出 |
void * |
数据读取缓冲区 |
count |
输入 |
qosa_size_t |
期望读取的字节数 |
返回值说明
非负值:函数执行成功,返回实际读取的字节数
-1:函数执行失败
qosa_vfs_write¶
功能描述
向已打开的文件描述符写入数据。函数原型
qosa_ssize_t qosa_vfs_write(qosa_int32_t fd, const void *buf, qosa_size_t count)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
fd |
输入 |
qosa_int32_t |
文件描述符 |
buf |
输入 |
const void * |
待写入数据缓冲区 |
count |
输入 |
qosa_size_t |
期望写入的字节数 |
返回值说明
非负值:函数执行成功,返回实际写入的字节数
-1:函数执行失败
qosa_vfs_lseek¶
功能描述
重新定位文件读写偏移量。函数原型
qosa_int64_t qosa_vfs_lseek(qosa_int32_t fd, qosa_int64_t offset, qosa_int32_t whence)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
fd |
输入 |
qosa_int32_t |
文件描述符 |
offset |
输入 |
qosa_int64_t |
偏移量;相对于 whence 参数指定的位置 |
whence |
输入 |
qosa_int32_t |
偏移起始位置 |
返回值说明
非负值:函数执行成功,返回从文件起始位置计算的新偏移量;单位:字节
-1:函数执行失败
qosa_vfs_fstat¶
功能描述
通过文件描述符获取文件状态信息。函数原型
qosa_int32_t qosa_vfs_fstat(qosa_int32_t fd, struct qosa_vfs_stat_t *st)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
fd |
输入 |
qosa_int32_t |
文件描述符 |
st |
输出 |
*struct qosa_vfs_stat_t ** |
指向文件状态结构体的指针;详见 qosa_vfs_stat_t |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_stat¶
功能描述
通过文件路径获取文件状态信息。函数原型
qosa_int32_t qosa_vfs_stat(const char *path, struct qosa_vfs_stat_t *st)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
文件路径 |
st |
输出 |
*struct qosa_vfs_stat_t ** |
指向文件状态结构体的指针;详见 qosa_vfs_stat_t |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_truncate¶
功能描述
将指定路径的文件截断到指定长度。若文件长度小于指定长度,文件将被扩展;若大于指定长度,文件将被截断。函数原型
qosa_int32_t qosa_vfs_truncate(const char *path, long length)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
文件路径 |
length |
输入 |
long |
文件截断后的目标长度;单位:字节 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_ftruncate¶
功能描述
通过文件描述符将文件截断到指定长度。函数原型
qosa_int32_t qosa_vfs_ftruncate(qosa_int32_t fd, long length)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
fd |
输入 |
qosa_int32_t |
文件描述符 |
length |
输入 |
long |
文件截断后的目标长度;单位:字节 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_unlink¶
功能描述
删除指定路径的文件。函数原型
qosa_int32_t qosa_vfs_unlink(const char *pathname)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
pathname |
输入 |
const char * |
待删除的文件路径 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_rename¶
功能描述
重命名或移动文件。源路径和目标路径必须在同一个挂载的文件系统上。函数原型
qosa_int32_t qosa_vfs_rename(const char *oldpath, const char *newpath)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
oldpath |
输入 |
const char * |
原文件路径 |
newpath |
输入 |
const char * |
新文件路径 |
返回值说明
0:函数执行成功
-1:函数执行失败
EXDEV:源路径和目标路径不在同一个挂载的文件系统上
qosa_vfs_fsync¶
功能描述
将文件的内存缓冲区数据同步写入存储设备,确保数据持久化。函数原型
qosa_int32_t qosa_vfs_fsync(qosa_int32_t fd)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
fd |
输入 |
qosa_int32_t |
文件描述符 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_file_size¶
功能描述
获取指定路径文件的大小。内部调用 qosa_vfs_stat() 获取文件状态并返回文件大小。函数原型
qosa_ssize_t qosa_vfs_file_size(const char *path)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
文件路径 |
返回值说明
非负值:函数执行成功,返回文件大小;单位:字节
-1:函数执行失败
qosa_vfs_file_read¶
功能描述
一次性读取整个文件的辅助函数。内部依次调用 qosa_vfs_open()、qosa_vfs_read() 和 qosa_vfs_close() 完成操作。函数原型
qosa_ssize_t qosa_vfs_file_read(const char *path, void *buf, qosa_size_t count)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
文件路径 |
buf |
输出 |
void * |
数据读取缓冲区 |
count |
输入 |
qosa_size_t |
期望读取的字节数 |
返回值说明
非负值:函数执行成功,返回实际读取的字节数
-1:函数执行失败
qosa_vfs_file_write¶
功能描述
一次性写入整个文件的辅助函数。内部依次调用 qosa_vfs_open()、qosa_vfs_write() 和 qosa_vfs_close() 完成操作。函数原型
qosa_ssize_t qosa_vfs_file_write(const char *path, const void *buf, qosa_size_t count)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
文件路径 |
buf |
输入 |
const void * |
待写入数据缓冲区 |
count |
输入 |
qosa_size_t |
期望写入的字节数 |
返回值说明
非负值:函数执行成功,返回实际写入的字节数
-1:函数执行失败
qosa_vfs_mkdir¶
功能描述
创建单级目录。函数原型
qosa_int32_t qosa_vfs_mkdir(const char *pathname, qosa_int32_t mode)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
pathname |
输入 |
const char * |
待创建目录路径 |
mode |
输入 |
qosa_int32_t |
目录权限模式;可能被文件系统实现忽略 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_rmdir¶
功能描述
删除空目录。函数原型
qosa_int32_t qosa_vfs_rmdir(const char *pathname)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
pathname |
输入 |
const char * |
待删除的目录路径 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_opendir¶
功能描述
打开目录流,返回目录句柄用于后续目录遍历操作。函数原型
QOSA_VFS_DIR *qosa_vfs_opendir(const char *name)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
name |
输入 |
const char * |
待打开的目录路径 |
返回值说明
非NULL:函数执行成功,返回指向目录流的指针
NULL:函数执行失败
qosa_vfs_readdir¶
功能描述
读取目录流中的下一个目录条目。函数原型
struct qosa_vfs_dirent_t *qosa_vfs_readdir(QOSA_VFS_DIR *dirp)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
dirp |
输入 |
*QOSA_VFS_DIR ** |
由 qosa_vfs_opendir() 返回的目录流指针;详见 QOSA_VFS_DIR |
返回值说明
非NULL:函数执行成功,返回指向目录条目结构体的指针
NULL:已到达目录末尾或函数执行失败
qosa_vfs_readdir_r¶
功能描述
读取目录流中的下一个目录条目(线程安全版本)。函数原型
qosa_int32_t qosa_vfs_readdir_r(QOSA_VFS_DIR *dirp, struct qosa_vfs_dirent_t *entry, struct qosa_vfs_dirent_t **result)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
dirp |
输入 |
*QOSA_VFS_DIR ** |
由 qosa_vfs_opendir() 返回的目录流指针;详见 QOSA_VFS_DIR |
entry |
输出 |
*struct qosa_vfs_dirent_t ** |
用于存储读取结果的目录条目缓冲区;详见 qosa_vfs_dirent_t |
result |
输出 |
*struct qosa_vfs_dirent_t *** |
指向结果指针;成功时指向 entry,到达目录末尾时为 NULL |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_closedir¶
功能描述
关闭已打开的目录流,释放相关资源。函数原型
qosa_int32_t qosa_vfs_closedir(QOSA_VFS_DIR *pdir)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
pdir |
输入 |
*QOSA_VFS_DIR ** |
由 qosa_vfs_opendir() 返回的目录流指针;详见 QOSA_VFS_DIR |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_telldir¶
功能描述
获取目录流的当前读取位置。函数原型
long qosa_vfs_telldir(QOSA_VFS_DIR *pdir)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
pdir |
输入 |
*QOSA_VFS_DIR ** |
由 qosa_vfs_opendir() 返回的目录流指针;详见 QOSA_VFS_DIR |
返回值说明
非负值:函数执行成功,返回当前目录流位置
-1:函数执行失败
qosa_vfs_seekdir¶
功能描述
设置目录流中下次 qosa_vfs_readdir() 调用的读取位置。函数原型
void qosa_vfs_seekdir(QOSA_VFS_DIR *pdir, long loc)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
pdir |
输入 |
*QOSA_VFS_DIR ** |
由 qosa_vfs_opendir() 返回的目录流指针;详见 QOSA_VFS_DIR |
loc |
输入 |
long |
目标位置;由 qosa_vfs_telldir() 返回 |
返回值说明
无
qosa_vfs_rewinddir¶
功能描述
将目录流的读取位置重置到起始位置。函数原型
void qosa_vfs_rewinddir(QOSA_VFS_DIR *pdir)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
pdir |
输入 |
*QOSA_VFS_DIR ** |
由 qosa_vfs_opendir() 返回的目录流指针;详见 QOSA_VFS_DIR |
返回值说明
无
qosa_vfs_mkpath¶
功能描述
递归创建多级目录,自动创建路径中所有不存在的父级目录。函数原型
qosa_int32_t qosa_vfs_mkpath(const char *path, qosa_int32_t mode)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
待创建的多级目录路径 |
mode |
输入 |
qosa_int32_t |
目录权限模式 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_mkfilepath¶
功能描述
递归创建文件所在的所有父级目录。传入文件路径,自动创建该文件路径中不存在的目录层级。函数原型
qosa_int32_t qosa_vfs_mkfilepath(const char *path, qosa_int32_t mode)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
文件路径(函数会创建该路径的父级目录) |
mode |
输入 |
qosa_int32_t |
目录权限模式 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_rmchildren¶
功能描述
删除指定目录下的所有子文件和子目录,但保留该目录本身。函数原型
qosa_int32_t qosa_vfs_rmchildren(const char *path)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
目标目录路径 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_rmdir_recursive¶
功能描述
递归删除指定目录及其下所有子文件和子目录。函数原型
qosa_int32_t qosa_vfs_rmdir_recursive(const char *path)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
待递归删除的目录路径 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_chdir¶
功能描述
切换当前工作目录。在RTOS系统中工作目录是全局概念,切换工作目录可能影响其他任务,请谨慎使用。函数原型
qosa_int32_t qosa_vfs_chdir(const char *path)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
目标目录路径 |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_getcwd¶
功能描述
获取当前工作目录的绝对路径。函数原型
char *qosa_vfs_getcwd(char *buf, qosa_size_t size)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
buf |
输出 |
char * |
用于存储当前工作目录的缓冲区 |
size |
输入 |
qosa_size_t |
缓冲区大小;单位:字节 |
返回值说明
非NULL:函数执行成功,返回当前工作目录路径字符串指针
NULL:函数执行失败
qosa_vfs_statvfs¶
功能描述
通过文件路径获取文件系统的统计信息,包括总容量、可用空间、块大小等。函数原型
qosa_int32_t qosa_vfs_statvfs(const char *path, struct qosa_vfs_statvfs_t *buf)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
文件系统中的任意路径 |
buf |
输出 |
*struct qosa_vfs_statvfs_t ** |
指向文件系统统计信息结构体的指针;详见 qosa_vfs_statvfs_t |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_fstatvfs¶
功能描述
通过已打开的文件描述符获取文件系统的统计信息。函数原型
qosa_int32_t qosa_vfs_fstatvfs(qosa_int32_t fd, struct qosa_vfs_statvfs_t *buf)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
fd |
输入 |
qosa_int32_t |
文件描述符 |
buf |
输出 |
*struct qosa_vfs_statvfs_t ** |
指向文件系统统计信息结构体的指针;详见 qosa_vfs_statvfs_t |
返回值说明
0:函数执行成功
-1:函数执行失败
qosa_vfs_mount_count¶
功能描述
获取当前系统中已挂载的文件系统数量。函数原型
qosa_int32_t qosa_vfs_mount_count(void)
参数说明
无返回值说明
返回已挂载的文件系统数量
qosa_vfs_mount_points¶
功能描述
获取当前系统中所有已挂载文件系统的挂载点路径列表。函数原型
qosa_int32_t qosa_vfs_mount_points(char **mp, qosa_size_t count)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
mp |
输出 |
char ** |
用于存储挂载点路径的字符串数组 |
count |
输入 |
qosa_size_t |
数组元素数量 |
返回值说明
返回实际获取的挂载点数量
qosa_vfs_umount¶
功能描述
卸载指定路径所在的文件系统。路径必须为绝对路径,可以是挂载点本身,也可以是挂载点下的任意文件或目录。函数原型
qosa_int32_t qosa_vfs_umount(const char *path)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
文件路径;必须为绝对路径(以’/'开头) |
返回值说明
0:函数执行成功
-1:函数执行失败(参数无效或没有对应的挂载点)
qosa_vfs_remount¶
功能描述
以指定标志重新挂载文件系统。仅支持 QOSA_MS_RDONLY 只读挂载标志。路径必须为挂载点。函数原型
qosa_int32_t qosa_vfs_remount(const char *path, unsigned flags)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
挂载点路径 |
flags |
输入 |
unsigned |
挂载标志 |
返回值说明
0:函数执行成功
-1:函数执行失败(路径不是挂载点或文件系统不支持重新挂载)
qosa_vfs_umount_all¶
功能描述
卸载所有已挂载的文件系统。仅在FDL模式下有效,应用层实现为空函数。函数原型
void qosa_vfs_umount_all(void)
参数说明
无返回值说明
无
qosa_vfs_dir_total_size¶
功能描述
递归计算指定目录下所有文件的总大小。函数原型
qosa_int64_t qosa_vfs_dir_total_size(const char *path)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
目录路径 |
返回值说明
非负值:函数执行成功,返回目录下所有文件的总大小;单位:字节
-1:函数执行失败(参数无效或内存不足)
qosa_vfs_realpath¶
功能描述
将文件路径转换为规范化的绝对路径,消除路径中的".“和”…"等相对引用。函数原型
char *qosa_vfs_realpath(const char *path, char *resolved_path)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
path |
输入 |
const char * |
待解析的文件路径 |
resolved_path |
输出 |
char * |
用于存储规范化绝对路径的缓冲区 |
返回值说明
非NULL:函数执行成功,返回 resolved_path 指针
NULL:函数执行失败
qosa_vfs_sync¶
功能描述
将文件系统缓冲区中的数据强制刷入磁盘。函数原型
qosa_int32_t qosa_vfs_sync(qosa_int32_t fd)
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
fd |
输入 |
qosa_int32_t |
待同步的文件描述符 |
返回值说明
0:函数执行成功
-1:函数执行失败
结构体定义¶
qosa_vfs_stat_t¶
文件状态信息结构体定义如下:
struct qosa_vfs_stat_t
{
qosa_uint64_t st_dev;
qosa_uint64_t st_ino;
qosa_uint64_t st_mode;
qosa_uint64_t st_nlink;
qosa_uint64_t st_uid;
qosa_uint64_t st_gid;
qosa_uint64_t st_rdev;
qosa_uint64_t st_size;
qosa_uint64_t st_spare1;
qosa_uint64_t st_spare2;
qosa_uint64_t st_spare3;
qosa_uint64_t st_blksize;
qosa_uint64_t st_blocks;
qosa_uint64_t st_spare4[2];
};
成员 |
说明 |
|---|---|
st_dev |
设备ID |
st_ino |
i-node编号 |
st_mode |
文件类型和权限 |
st_nlink |
硬链接数量 |
st_uid |
所有者用户ID |
st_gid |
所有者组ID |
st_rdev |
设备ID(若文件为设备文件) |
st_size |
文件大小;单位:字节 |
st_spare1 |
保留字段 |
st_spare2 |
保留字段 |
st_spare3 |
保留字段 |
st_blksize |
I/O操作块大小 |
st_blocks |
文件占用的块数 |
st_spare4 |
保留字段 |
QOSA_VFS_DIR¶
目录操作句柄结构体定义如下:
typedef struct
{
qosa_int16_t fs_index;
qosa_int16_t _reserved;
} QOSA_VFS_DIR;
成员 |
说明 |
|---|---|
fs_index |
内部文件系统索引标识 |
_reserved |
保留字段,用于字节对齐或未来扩展 |
qosa_vfs_dirent_t¶
目录条目信息结构体定义如下:
struct qosa_vfs_dirent_t
{
qosa_int32_t d_ino;
unsigned char d_type;
char d_name[256];
};
成员 |
说明 |
|---|---|
d_ino |
inode编号;文件系统实现可自定义用途 |
d_type |
文件类型标识 |
d_name |
文件名(不含路径部分);最大256字节 |
qosa_vfs_statvfs_t¶
文件系统统计信息结构体定义如下:
struct qosa_vfs_statvfs_t
{
unsigned long f_bsize;
unsigned long f_frsize;
unsigned long f_blocks;
unsigned long f_bfree;
unsigned long f_bavail;
unsigned long f_files;
unsigned long f_ffree;
unsigned long f_favail;
unsigned long f_fsid;
unsigned long f_flag;
unsigned long f_namemax;
};
成员 |
说明 |
|---|---|
f_bsize |
文件系统块大小;单位:字节 |
f_frsize |
分片大小;单位:字节 |
f_blocks |
文件系统总块数(以 f_frsize 为单位) |
f_bfree |
文件系统空闲块数 |
f_bavail |
非超级用户可用的空闲块数 |
f_files |
文件系统中的文件节点总数 |
f_ffree |
文件系统中的空闲文件节点数 |
f_favail |
可用的文件节点数 |
f_fsid |
文件系统ID标识符 |
f_flag |
挂载标志 |
f_namemax |
文件名最大长度 |
宏定义¶
文件打开标志¶
#define QOSA_VFS_O_RDONLY
#define QOSA_VFS_O_WRONLY
#define QOSA_VFS_O_RDWR
#define QOSA_VFS_O_CREAT
#define QOSA_VFS_O_EXCL
#define QOSA_VFS_O_TRUNC
#define QOSA_VFS_O_APPEND
宏名 |
说明 |
|---|---|
QOSA_VFS_O_RDONLY |
只读模式打开文件 |
QOSA_VFS_O_WRONLY |
只写模式打开文件 |
QOSA_VFS_O_RDWR |
读写模式打开文件,与 QOSA_VFS_O_RDONLY 和 QOSA_VFS_O_WRONLY 互斥 |
QOSA_VFS_O_CREAT |
文件不存在时自动创建 |
QOSA_VFS_O_EXCL |
配合 QOSA_VFS_O_CREAT 使用,文件已存在时打开失败 |
QOSA_VFS_O_TRUNC |
文件存在且以可写模式打开时,清空文件内容,长度置0 |
QOSA_VFS_O_APPEND |
写入数据时从文件末尾追加 |
文件偏移标志¶
#define QOSA_VFS_SEEK_SET
#define QOSA_VFS_SEEK_CUR
#define QOSA_VFS_SEEK_END
宏名 |
说明 |
|---|---|
QOSA_VFS_SEEK_SET |
从文件起始位置偏移 |
QOSA_VFS_SEEK_CUR |
从当前读写位置偏移 |
QOSA_VFS_SEEK_END |
从文件末尾位置偏移 |
文件类型标识¶
#define QOSA_VFS_DT_DIR 4
#define QOSA_VFS_DT_REG 8
宏名 |
值 |
说明 |
|---|---|---|
QOSA_VFS_DT_DIR |
4 |
目录 |
QOSA_VFS_DT_REG |
8 |
普通文件 |
路径长度限制¶
#define QOSA_VFS_PATH_MAX 192
宏名 |
值 |
说明 |
|---|---|---|
QOSA_VFS_PATH_MAX |
192 |
最大绝对文件路径长度(含挂载点和终止符\0) |
应用逻辑流程图¶
文件操作流程¶
目录操作流程¶
示例代码¶
完整示例代码请查看 https://github.com/UniRTOS/UniRTOS-Doc-Examples/blob/main/system/vfs/vfs.c