|
xt-sdk 文档 v1.0.3
xt-sdk 嵌入式 SDK API 参考
|
xt-sdk 虚拟文件系统——支持多后端挂载、两级锁、静态/动态内存切换 更多...
专题 | |
| 开发者接口 | |
| 后端对接、移植接口、内部行为约束 | |
结构体 | |
| struct | xt_vfs_stat |
| 文件状态信息 更多... | |
| struct | xt_vfs_statfs |
| 文件系统状态信息 更多... | |
| struct | xt_vfs_utimbuf |
| 文件时间信息 更多... | |
| struct | xt_vfs_dirent |
| 目录项信息 更多... | |
宏定义 | |
| #define | XT_VFS_O_RDONLY 0x01 |
| 只读 | |
| #define | XT_VFS_O_WRONLY 0x02 |
| 只写 | |
| #define | XT_VFS_O_RDWR 0x04 |
| 读写 | |
| #define | XT_VFS_O_CREAT 0x08 |
| 创建,不存在时创建 | |
| #define | XT_VFS_O_EXCL 0x10 |
| 排他,与 O_CREAT 一起使用时文件存在则失败 | |
| #define | XT_VFS_O_TRUNC 0x20 |
| 截断,文件存在且可写时清空内容 | |
| #define | XT_VFS_O_APPEND 0x40 |
| 追加,写入定位到文件末尾 | |
| #define | XT_VFS_TYPE_REG 0x01 |
| 普通文件 | |
| #define | XT_VFS_TYPE_DIR 0x02 |
| 目录 | |
| #define | XT_VFS_TYPE_UNKNOWN 0xFF |
| 未知类型 | |
| #define | XT_VFS_F_OK 0x00 |
| 文件存在性检查 | |
| #define | XT_VFS_R_OK 0x04 |
| 读权限检查 | |
| #define | XT_VFS_W_OK 0x02 |
| 写权限检查 | |
| #define | XT_VFS_X_OK 0x01 |
| 执行权限检查 | |
| #define | XT_VFS_S_IFMT 0xF000 |
| 文件类型掩码 | |
| #define | XT_VFS_S_IFREG 0x1000 |
| 普通文件 | |
| #define | XT_VFS_S_IFDIR 0x2000 |
| 目录 | |
| #define | XT_VFS_S_IRWXU 0x01C0 |
| 用户读/写/执行 | |
| #define | XT_VFS_S_IRUSR 0x0100 |
| 用户读 | |
| #define | XT_VFS_S_IWUSR 0x0080 |
| 用户写 | |
| #define | XT_VFS_S_IXUSR 0x0040 |
| 用户执行 | |
| #define | XT_VFS_S_IRWXG 0x0038 |
| 组读/写/执行 | |
| #define | XT_VFS_S_IRGRP 0x0020 |
| 组读 | |
| #define | XT_VFS_S_IWGRP 0x0010 |
| 组写 | |
| #define | XT_VFS_S_IXGRP 0x0008 |
| 组执行 | |
| #define | XT_VFS_S_IRWXO 0x0007 |
| 其他读/写/执行 | |
| #define | XT_VFS_S_IROTH 0x0004 |
| 其他读 | |
| #define | XT_VFS_S_IWOTH 0x0002 |
| 其他写 | |
| #define | XT_VFS_S_IXOTH 0x0001 |
| 其他执行 | |
| #define | XT_VFS_S_DEFAULT_FILE (XT_VFS_S_IFREG | XT_VFS_S_IRUSR | XT_VFS_S_IWUSR | XT_VFS_S_IRGRP | XT_VFS_S_IROTH) |
| 普通文件默认权限(所有者读写+组读+其他读) | |
| #define | XT_VFS_S_DEFAULT_DIR (XT_VFS_S_IFDIR | XT_VFS_S_IRWXU | XT_VFS_S_IRGRP | XT_VFS_S_IXGRP | XT_VFS_S_IROTH | XT_VFS_S_IXOTH) |
| 目录默认权限(所有者全权限+组读执行+其他读执行) | |
| #define | XT_VFS_SEEK_SET 0 |
| 从文件头开始 | |
| #define | XT_VFS_SEEK_CUR 1 |
| 从当前位置 | |
| #define | XT_VFS_SEEK_END 2 |
| 从文件末尾 | |
| #define | XT_VFS_ERR_OK 0 |
| 成功 | |
| #define | XT_VFS_ERR_EOF -1 |
| 文件结束 | |
| #define | XT_VFS_ERR_NOTFOUND -2 |
| 文件或目录不存在 | |
| #define | XT_VFS_ERR_EXIST -3 |
| 文件已存在 | |
| #define | XT_VFS_ERR_NOSPC -4 |
| 磁盘空间不足 | |
| #define | XT_VFS_ERR_NOMEM -5 |
| 内存不足 | |
| #define | XT_VFS_ERR_IO -6 |
| IO 错误 | |
| #define | XT_VFS_ERR_INVAL -7 |
| 无效参数 | |
| #define | XT_VFS_ERR_DENIED -8 |
| 权限拒绝 | |
| #define | XT_VFS_ERR_NFILE -9 |
| 打开文件过多 | |
| #define | XT_VFS_ERR_NOTDIR -10 |
| 不是目录 | |
| #define | XT_VFS_ERR_ISDIR -11 |
| 是目录 | |
| #define | XT_VFS_ERR_NOTEMPTY -12 |
| 目录非空 | |
| #define | XT_VFS_ERR_BUSY -13 |
| 设备忙 | |
| #define | XT_VFS_ERR_NOSYS -14 |
| 功能未实现 | |
| #define | XT_VFS_INVALID_FD ((xt_vfs_fd_t)(-1)) |
| 无效文件描述符 | |
类型定义 | |
| typedef int32_t | xt_vfs_err_t |
| 错误码类型,详细错误码见 XT_VFS_ERR_* 系列宏 | |
| typedef int32_t | xt_vfs_fd_t |
| 文件描述符类型,内部编码 generation+index,由 VFS Core 生成,用户不应自行构造 | |
| typedef uint32_t | xt_vfs_size_t |
| 文件大小类型(无符号) | |
| typedef int32_t | xt_vfs_ssize_t |
| 文件大小类型(有符号) | |
| typedef uint32_t | xt_vfs_mode_t |
| 文件模式类型(权限 + 类型) | |
| typedef uint32_t | xt_vfs_time_t |
| 时间类型(固定 32 位) | |
| typedef int32_t | xt_vfs_off_t |
| 偏移量类型 | |
| typedef int32_t | xt_vfs_whence_t |
| 寻址基准类型 | |
| typedef int32_t | xt_vfs_ino_t |
| inode 编号类型 | |
| typedef struct xt_vfs_stat | xt_vfs_stat_t |
| 文件状态信息 | |
| typedef struct xt_vfs_statfs | xt_vfs_statfs_t |
| 文件系统状态信息 | |
| typedef struct xt_vfs_utimbuf | xt_vfs_utimbuf_t |
| 文件时间信息 | |
| typedef struct xt_vfs_dir | xt_vfs_dir_t |
| 目录句柄(opaque,内部字段不暴露) | |
| typedef struct xt_vfs_dirent | xt_vfs_dirent_t |
| 目录项信息 | |
| typedef struct xt_vfs_ops | xt_vfs_ops_t |
| 后端操作接口(前向声明) | |
| typedef struct xt_vfs | xt_vfs_t |
| VFS 实例(前向声明) | |
生命周期 | |
| |
| xt_vfs_err_t | xt_vfs_init (const xt_vfs_config_t *config) |
| 初始化 VFS 实例 | |
| xt_vfs_err_t | xt_vfs_deinit (void) |
| 销毁 VFS 实例 | |
挂载管理 | |
| xt_vfs_err_t | xt_vfs_mount (const char *path, const xt_vfs_ops_t *ops, void *ctx) |
| 挂载后端文件系统 | |
| xt_vfs_err_t | xt_vfs_unmount (const char *path) |
| 卸载后端文件系统 | |
文件读写 | |
| xt_vfs_fd_t | xt_vfs_open (const char *path, xt_vfs_mode_t flags) |
| 打开文件 | |
| xt_vfs_err_t | xt_vfs_close (xt_vfs_fd_t fd) |
| 关闭文件 | |
| xt_vfs_ssize_t | xt_vfs_read (xt_vfs_fd_t fd, void *buf, xt_vfs_size_t size) |
| 读取文件 | |
| xt_vfs_ssize_t | xt_vfs_write (xt_vfs_fd_t fd, const void *buf, xt_vfs_size_t size) |
| 写入文件 | |
| xt_vfs_ssize_t | xt_vfs_seek (xt_vfs_fd_t fd, xt_vfs_off_t offset, xt_vfs_whence_t whence) |
| 文件定位 | |
| xt_vfs_ssize_t | xt_vfs_tell (xt_vfs_fd_t fd) |
| 获取当前文件位置 | |
| xt_vfs_err_t | xt_vfs_fsync (xt_vfs_fd_t fd) |
| 同步单个文件到存储设备 | |
文件信息与管理 | |
| xt_vfs_err_t | xt_vfs_remove (const char *path) |
| 删除文件 | |
| xt_vfs_err_t | xt_vfs_rename (const char *old_path, const char *new_path) |
| 重命名文件 | |
| xt_vfs_err_t | xt_vfs_stat (const char *path, xt_vfs_stat_t *stat) |
| 获取文件状态 | |
| xt_vfs_err_t | xt_vfs_fstat (xt_vfs_fd_t fd, xt_vfs_stat_t *stat) |
| 获取已打开文件的状态 | |
| xt_vfs_err_t | xt_vfs_statfs (const char *path, xt_vfs_statfs_t *statfs) |
| 获取文件系统状态 | |
| xt_vfs_err_t | xt_vfs_truncate (const char *path, xt_vfs_off_t length) |
| 截断文件到指定大小 | |
| xt_vfs_err_t | xt_vfs_ftruncate (xt_vfs_fd_t fd, xt_vfs_off_t length) |
| 截断已打开的文件 | |
| xt_vfs_err_t | xt_vfs_access (const char *path, xt_vfs_mode_t amode) |
| 检查文件访问权限 | |
| xt_vfs_err_t | xt_vfs_utime (const char *path, const xt_vfs_utimbuf_t *buf) |
| 更新文件时间 | |
| xt_vfs_err_t | xt_vfs_sync_all (const char *path) |
| 同步所有文件到存储设备 | |
目录操作 | |
| xt_vfs_err_t | xt_vfs_mkdir (const char *path) |
| 创建目录 | |
| xt_vfs_err_t | xt_vfs_rmdir (const char *path) |
| 删除空目录 | |
| xt_vfs_dir_t * | xt_vfs_opendir (const char *path) |
| 打开目录 | |
| xt_vfs_err_t | xt_vfs_closedir (xt_vfs_dir_t *dir) |
| 关闭目录 | |
| xt_vfs_dirent_t * | xt_vfs_readdir (xt_vfs_dir_t *dir) |
| 读取目录项 | |
| xt_vfs_err_t | xt_vfs_rewinddir (xt_vfs_dir_t *dir) |
| 重置目录读取位置 | |
| xt_vfs_off_t | xt_vfs_telldir (xt_vfs_dir_t *dir) |
| 获取目录读取位置 | |
| xt_vfs_err_t | xt_vfs_seekdir (xt_vfs_dir_t *dir, xt_vfs_off_t loc) |
| 设置目录读取位置 | |
工作目录 | |
| xt_vfs_err_t | xt_vfs_chdir (const char *path) |
| 切换当前工作目录 | |
| char * | xt_vfs_getcwd (char *buf, xt_vfs_size_t size) |
| 获取当前工作目录 | |
错误与状态 | |
| xt_vfs_err_t | xt_vfs_errno (void) |
| 获取当前线程的最后一个错误码 | |
| const char * | xt_vfs_strerror (xt_vfs_err_t err) |
| 获取错误码对应的字符串描述 | |
| bool | xt_vfs_is_active (void) |
| 检查 VFS 实例是否已激活 | |
xt-sdk 虚拟文件系统——支持多后端挂载、两级锁、静态/动态内存切换
| #define XT_VFS_INVALID_FD ((xt_vfs_fd_t)(-1)) |
| #define XT_VFS_O_RDONLY 0x01 |
| #define XT_VFS_S_DEFAULT_DIR (XT_VFS_S_IFDIR | XT_VFS_S_IRWXU | XT_VFS_S_IRGRP | XT_VFS_S_IXGRP | XT_VFS_S_IROTH | XT_VFS_S_IXOTH) |
| #define XT_VFS_S_DEFAULT_FILE (XT_VFS_S_IFREG | XT_VFS_S_IRUSR | XT_VFS_S_IWUSR | XT_VFS_S_IRGRP | XT_VFS_S_IROTH) |
| typedef struct xt_vfs_dir xt_vfs_dir_t |
| typedef struct xt_vfs_dirent xt_vfs_dirent_t |
目录项信息
包含文件节点号、文件类型和文件名。
| typedef int32_t xt_vfs_err_t |
| typedef int32_t xt_vfs_fd_t |
| typedef int32_t xt_vfs_ino_t |
| typedef uint32_t xt_vfs_mode_t |
| typedef int32_t xt_vfs_off_t |
| typedef struct xt_vfs_ops xt_vfs_ops_t |
| typedef uint32_t xt_vfs_size_t |
| typedef int32_t xt_vfs_ssize_t |
| typedef struct xt_vfs_stat xt_vfs_stat_t |
文件状态信息
包含文件大小、类型权限、时间戳。
| typedef struct xt_vfs_statfs xt_vfs_statfs_t |
文件系统状态信息
包含总块数、空闲块数、块大小及文件节点统计。
| typedef uint32_t xt_vfs_time_t |
| typedef struct xt_vfs_utimbuf xt_vfs_utimbuf_t |
文件时间信息
包含访问时间和修改时间。
| typedef int32_t xt_vfs_whence_t |
| xt_vfs_err_t xt_vfs_access | ( | const char * | path, |
| xt_vfs_mode_t | amode ) |
检查文件访问权限
| path | 文件路径 |
| amode | 访问模式(XT_VFS_F_OK / XT_VFS_R_OK / XT_VFS_W_OK / XT_VFS_X_OK) |
| xt_vfs_err_t xt_vfs_chdir | ( | const char * | path | ) |
切换当前工作目录
每个线程独立维护自己的 CWD。
| path | 目录路径 |
| xt_vfs_err_t xt_vfs_close | ( | xt_vfs_fd_t | fd | ) |
关闭文件
全局锁下校验并释放 fd → mount 锁下调后端 close。
| fd | 文件描述符 |
| xt_vfs_err_t xt_vfs_closedir | ( | xt_vfs_dir_t * | dir | ) |
关闭目录
| dir | 目录句柄 |
| xt_vfs_err_t xt_vfs_deinit | ( | void | ) |
销毁 VFS 实例
释放所有已分配资源,卸载所有挂载点,销毁锁,重置状态。
| xt_vfs_err_t xt_vfs_errno | ( | void | ) |
获取当前线程的最后一个错误码
| xt_vfs_err_t xt_vfs_fstat | ( | xt_vfs_fd_t | fd, |
| xt_vfs_stat_t * | stat ) |
获取已打开文件的状态
| fd | 文件描述符 |
| stat | 输出状态结构体 |
| xt_vfs_err_t xt_vfs_fsync | ( | xt_vfs_fd_t | fd | ) |
同步单个文件到存储设备
| fd | 文件描述符 |
| xt_vfs_err_t xt_vfs_ftruncate | ( | xt_vfs_fd_t | fd, |
| xt_vfs_off_t | length ) |
截断已打开的文件
| fd | 文件描述符 |
| length | 新的文件大小 |
| char * xt_vfs_getcwd | ( | char * | buf, |
| xt_vfs_size_t | size ) |
获取当前工作目录
| buf | 输出缓冲区 |
| size | 缓冲区大小 |
| xt_vfs_err_t xt_vfs_init | ( | const xt_vfs_config_t * | config | ) |
初始化 VFS 实例
根据配置分配挂载表、句柄表、线程上下文表等资源。 支持三种内存模式:动态(xt_malloc)、外部传入、静态数组。
| config | VFS 配置,不可为 NULL |
| bool xt_vfs_is_active | ( | void | ) |
检查 VFS 实例是否已激活
| xt_vfs_err_t xt_vfs_mkdir | ( | const char * | path | ) |
创建目录
| path | 目录路径 |
| xt_vfs_err_t xt_vfs_mount | ( | const char * | path, |
| const xt_vfs_ops_t * | ops, | ||
| void * | ctx ) |
挂载后端文件系统
将后端文件系统挂载到指定路径,支持多后端同时存在。 路径解析时执行最长前缀匹配。
| path | 挂载点路径 |
| ops | 后端操作接口 |
| ctx | 后端私有数据 |
| xt_vfs_fd_t xt_vfs_open | ( | const char * | path, |
| xt_vfs_mode_t | flags ) |
打开文件
两级锁操作:全局锁下路由 → mount 锁下调后端 open → 全局锁下分配 fd。
| path | 文件路径 |
| flags | 打开模式(XT_VFS_O_RDONLY / XT_VFS_O_WRONLY / XT_VFS_O_RDWR / O_CREAT 等) |
| xt_vfs_dir_t * xt_vfs_opendir | ( | const char * | path | ) |
打开目录
| path | 目录路径 |
| xt_vfs_ssize_t xt_vfs_read | ( | xt_vfs_fd_t | fd, |
| void * | buf, | ||
| xt_vfs_size_t | size ) |
读取文件
| fd | 文件描述符 |
| buf | 缓冲区 |
| size | 要读取的字节数 |
| xt_vfs_dirent_t * xt_vfs_readdir | ( | xt_vfs_dir_t * | dir | ) |
读取目录项
| dir | 目录句柄 |
| xt_vfs_err_t xt_vfs_remove | ( | const char * | path | ) |
删除文件
| path | 文件路径 |
| xt_vfs_err_t xt_vfs_rename | ( | const char * | old_path, |
| const char * | new_path ) |
重命名文件
要求新旧路径解析到同一挂载点。
| old_path | 原路径 |
| new_path | 新路径 |
| xt_vfs_err_t xt_vfs_rewinddir | ( | xt_vfs_dir_t * | dir | ) |
重置目录读取位置
| dir | 目录句柄 |
| xt_vfs_err_t xt_vfs_rmdir | ( | const char * | path | ) |
删除空目录
| path | 目录路径 |
| xt_vfs_ssize_t xt_vfs_seek | ( | xt_vfs_fd_t | fd, |
| xt_vfs_off_t | offset, | ||
| xt_vfs_whence_t | whence ) |
文件定位
| fd | 文件描述符 |
| offset | 偏移量 |
| whence | 寻址基准(XT_VFS_SEEK_SET / XT_VFS_SEEK_CUR / XT_VFS_SEEK_END) |
| xt_vfs_err_t xt_vfs_seekdir | ( | xt_vfs_dir_t * | dir, |
| xt_vfs_off_t | loc ) |
设置目录读取位置
| dir | 目录句柄 |
| loc | 目录读取位置 |
| xt_vfs_err_t xt_vfs_stat | ( | const char * | path, |
| xt_vfs_stat_t * | stat ) |
获取文件状态
| path | 文件路径 |
| stat | 输出状态结构体 |
| xt_vfs_err_t xt_vfs_statfs | ( | const char * | path, |
| xt_vfs_statfs_t * | statfs ) |
获取文件系统状态
| path | 路径 |
| statfs | 输出文件系统状态 |
| const char * xt_vfs_strerror | ( | xt_vfs_err_t | err | ) |
获取错误码对应的字符串描述
| err | 错误码 |
| xt_vfs_err_t xt_vfs_sync_all | ( | const char * | path | ) |
同步所有文件到存储设备
| path | 挂载点路径,NULL 表示同步所有已挂载文件系统 |
| xt_vfs_ssize_t xt_vfs_tell | ( | xt_vfs_fd_t | fd | ) |
获取当前文件位置
| fd | 文件描述符 |
| xt_vfs_off_t xt_vfs_telldir | ( | xt_vfs_dir_t * | dir | ) |
获取目录读取位置
| dir | 目录句柄 |
| xt_vfs_err_t xt_vfs_truncate | ( | const char * | path, |
| xt_vfs_off_t | length ) |
截断文件到指定大小
| path | 文件路径 |
| length | 新的文件大小 |
| xt_vfs_err_t xt_vfs_unmount | ( | const char * | path | ) |
卸载后端文件系统
| path | 挂载点路径 |
| xt_vfs_err_t xt_vfs_utime | ( | const char * | path, |
| const xt_vfs_utimbuf_t * | buf ) |
更新文件时间
| path | 文件路径 |
| buf | 时间结构体 |
| xt_vfs_ssize_t xt_vfs_write | ( | xt_vfs_fd_t | fd, |
| const void * | buf, | ||
| xt_vfs_size_t | size ) |
写入文件
| fd | 文件描述符 |
| buf | 数据缓冲区 |
| size | 要写入的字节数 |