xt-sdk 文档 v1.0.3
xt-sdk 嵌入式 SDK API 参考
载入中...
搜索中...
未找到
xt_vfs.h
浏览该文件的文档.
1
12
13#ifndef __XT_VFS_H__
14#define __XT_VFS_H__
15
16/* ==================== [Includes] ========================================== */
17
18#include <stdint.h>
19
20#include "xt_vfs_port.h"
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
32
33/* ==================== [Defines] =========================================== */
34
36
37/* ---- 文件打开模式 ---- */
38
40#define XT_VFS_O_RDONLY 0x01
42#define XT_VFS_O_WRONLY 0x02
44#define XT_VFS_O_RDWR 0x04
46#define XT_VFS_O_CREAT 0x08
48#define XT_VFS_O_EXCL 0x10
50#define XT_VFS_O_TRUNC 0x20
52#define XT_VFS_O_APPEND 0x40
53
54/* ---- 文件类型 ---- */
55
57#define XT_VFS_TYPE_REG 0x01
59#define XT_VFS_TYPE_DIR 0x02
61#define XT_VFS_TYPE_UNKNOWN 0xFF
62
63/* ---- access 模式 ---- */
64
66#define XT_VFS_F_OK 0x00
68#define XT_VFS_R_OK 0x04
70#define XT_VFS_W_OK 0x02
72#define XT_VFS_X_OK 0x01
73
74/* ---- 文件类型掩码 ---- */
75
77#define XT_VFS_S_IFMT 0xF000
79#define XT_VFS_S_IFREG 0x1000
81#define XT_VFS_S_IFDIR 0x2000
82
83/* ---- 文件权限位 ---- */
84
86#define XT_VFS_S_IRWXU 0x01C0
88#define XT_VFS_S_IRUSR 0x0100
90#define XT_VFS_S_IWUSR 0x0080
92#define XT_VFS_S_IXUSR 0x0040
94#define XT_VFS_S_IRWXG 0x0038
96#define XT_VFS_S_IRGRP 0x0020
98#define XT_VFS_S_IWGRP 0x0010
100#define XT_VFS_S_IXGRP 0x0008
102#define XT_VFS_S_IRWXO 0x0007
104#define XT_VFS_S_IROTH 0x0004
106#define XT_VFS_S_IWOTH 0x0002
108#define XT_VFS_S_IXOTH 0x0001
109
110/* ---- 默认权限 ---- */
111
113#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)
115#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)
116
117/* ---- 寻址方式 ---- */
118
120#define XT_VFS_SEEK_SET 0
122#define XT_VFS_SEEK_CUR 1
124#define XT_VFS_SEEK_END 2
125
126/* ---- 错误码 ---- */
127
129#define XT_VFS_ERR_OK 0
131#define XT_VFS_ERR_EOF -1
133#define XT_VFS_ERR_NOTFOUND -2
135#define XT_VFS_ERR_EXIST -3
137#define XT_VFS_ERR_NOSPC -4
139#define XT_VFS_ERR_NOMEM -5
141#define XT_VFS_ERR_IO -6
143#define XT_VFS_ERR_INVAL -7
145#define XT_VFS_ERR_DENIED -8
147#define XT_VFS_ERR_NFILE -9
149#define XT_VFS_ERR_NOTDIR -10
151#define XT_VFS_ERR_ISDIR -11
153#define XT_VFS_ERR_NOTEMPTY -12
155#define XT_VFS_ERR_BUSY -13
157#define XT_VFS_ERR_NOSYS -14
158
160#define XT_VFS_INVALID_FD ((xt_vfs_fd_t)(-1))
161
162/* ==================== [Typedefs] ========================================== */
163
165typedef int32_t xt_vfs_err_t;
167typedef int32_t xt_vfs_fd_t;
169typedef uint32_t xt_vfs_size_t;
171typedef int32_t xt_vfs_ssize_t;
173typedef uint32_t xt_vfs_mode_t;
175typedef uint32_t xt_vfs_time_t;
177typedef int32_t xt_vfs_off_t;
179typedef int32_t xt_vfs_whence_t;
181typedef int32_t xt_vfs_ino_t;
182
183/* ---- 文件状态 ---- */
184
197
198/* ---- 文件系统状态 ---- */
199
212
213/* ---- 文件时间 ---- */
214
224
225/* ---- 目录句柄 ---- */
226
228typedef struct xt_vfs_dir xt_vfs_dir_t;
229
230/* ---- 目录项 ---- */
231
242
243/* ---- 前向声明 ---- */
244
248typedef struct xt_vfs xt_vfs_t;
249
250/* ---- 后端操作接口 ---- */
251
258
271 xt_vfs_err_t (*mount)(void *ctx);
272
284 xt_vfs_err_t (*unmount)(void *ctx);
285
298 xt_vfs_err_t (*open)(void *ctx, const char *path, xt_vfs_mode_t flags, void **fh);
299
310 xt_vfs_err_t (*close)(void *ctx, void *fh);
311
324 xt_vfs_ssize_t (*read)(void *ctx, void *fh, void *buf, xt_vfs_size_t size);
325
338 xt_vfs_ssize_t (*write)(void *ctx, void *fh, const void *buf, xt_vfs_size_t size);
339
352 xt_vfs_ssize_t (*seek)(void *ctx, void *fh, xt_vfs_off_t offset, xt_vfs_whence_t whence);
353
365 xt_vfs_ssize_t (*tell)(void *ctx, void *fh);
366
377 xt_vfs_err_t (*fsync)(void *ctx, void *fh);
378
389 xt_vfs_err_t (*remove)(void *ctx, const char *path);
390
402 xt_vfs_err_t (*rename)(void *ctx, const char *old_path, const char *new_path);
403
415 xt_vfs_err_t (*stat)(void *ctx, const char *path, xt_vfs_stat_t *stat);
416
428
439 xt_vfs_err_t (*mkdir)(void *ctx, const char *path);
440
451 xt_vfs_err_t (*rmdir)(void *ctx, const char *path);
452
465 xt_vfs_err_t (*opendir)(void *ctx, const char *path, void **dh);
466
477 xt_vfs_err_t (*closedir)(void *ctx, void *dh);
478
491 xt_vfs_dirent_t *(*readdir)(void *ctx, void *dh);
492
503 xt_vfs_off_t (*telldir)(void *ctx, void *dh);
504
516 xt_vfs_err_t (*seekdir)(void *ctx, void *dh, xt_vfs_off_t loc);
517
529 xt_vfs_err_t (*fstat)(void *ctx, void *fh, xt_vfs_stat_t *stat);
530
542 xt_vfs_err_t (*truncate)(void *ctx, const char *path, xt_vfs_off_t length);
543
555 xt_vfs_err_t (*ftruncate)(void *ctx, void *fh, xt_vfs_off_t length);
556
568 xt_vfs_err_t (*access)(void *ctx, const char *path, xt_vfs_mode_t amode);
569
581 xt_vfs_err_t (*utime)(void *ctx, const char *path, const xt_vfs_utimbuf_t *buf);
582
593 xt_vfs_err_t (*sync_all)(void *ctx, const char *path);
594};
595 /* dev_xt_vfs */
597
599
600/* ==================== [Global Prototypes] ================================= */
601
606
620
630 /* 生命周期 */
632
637
653xt_vfs_err_t xt_vfs_mount(const char *path, const xt_vfs_ops_t *ops, void *ctx);
654
664xt_vfs_err_t xt_vfs_unmount(const char *path);
665 /* 挂载管理 */
667
672
684xt_vfs_fd_t xt_vfs_open(const char *path, xt_vfs_mode_t flags);
685
697
708
719
730
739
748 /* 文件读写 */
750
755
763xt_vfs_err_t xt_vfs_remove(const char *path);
764
775xt_vfs_err_t xt_vfs_rename(const char *old_path, const char *new_path);
776
785xt_vfs_err_t xt_vfs_stat(const char *path, xt_vfs_stat_t *stat);
786
796
805xt_vfs_err_t xt_vfs_statfs(const char *path, xt_vfs_statfs_t *statfs);
806
815xt_vfs_err_t xt_vfs_truncate(const char *path, xt_vfs_off_t length);
816
826
835xt_vfs_err_t xt_vfs_access(const char *path, xt_vfs_mode_t amode);
836
845xt_vfs_err_t xt_vfs_utime(const char *path, const xt_vfs_utimbuf_t *buf);
846
855 /* 文件信息与管理 */
857
858#if XT_VFS_ENABLE_DIR
859
864
872xt_vfs_err_t xt_vfs_mkdir(const char *path);
873
881xt_vfs_err_t xt_vfs_rmdir(const char *path);
882
891xt_vfs_dir_t *xt_vfs_opendir(const char *path);
892
901
911
920
929
939 /* 目录操作 */
941
942#endif /* XT_VFS_ENABLE_DIR */
943
944#if XT_VFS_ENABLE_CWD
945
950
960xt_vfs_err_t xt_vfs_chdir(const char *path);
961
971char *xt_vfs_getcwd(char *buf, xt_vfs_size_t size);
972 /* 工作目录 */
974
975#endif /* XT_VFS_ENABLE_CWD */
976
981
988
997
1005 /* 错误与状态 */
1007
1008/* ==================== [Macros] ============================================ */
1009 /* xt_vfs */
1011
1012#ifdef __cplusplus
1013} /* extern "C" */
1014#endif
1015
1016#endif /* __XT_VFS_H__ */
xt_vfs_err_t xt_vfs_remove(const char *path)
删除文件
xt_vfs_dirent_t * xt_vfs_readdir(xt_vfs_dir_t *dir)
读取目录项
xt_vfs_err_t xt_vfs_seekdir(xt_vfs_dir_t *dir, xt_vfs_off_t loc)
设置目录读取位置
bool xt_vfs_is_active(void)
检查 VFS 实例是否已激活
struct xt_vfs_ops xt_vfs_ops_t
后端操作接口(前向声明)
int32_t xt_vfs_whence_t
寻址基准类型
int32_t xt_vfs_fd_t
文件描述符类型,内部编码 generation+index,由 VFS Core 生成,用户不应自行构造
xt_vfs_err_t xt_vfs_rmdir(const char *path)
删除空目录
xt_vfs_off_t xt_vfs_telldir(xt_vfs_dir_t *dir)
获取目录读取位置
xt_vfs_ssize_t xt_vfs_read(xt_vfs_fd_t fd, void *buf, xt_vfs_size_t size)
读取文件
xt_vfs_err_t xt_vfs_utime(const char *path, const xt_vfs_utimbuf_t *buf)
更新文件时间
struct xt_vfs_stat xt_vfs_stat_t
文件状态信息
xt_vfs_err_t xt_vfs_closedir(xt_vfs_dir_t *dir)
关闭目录
const char * xt_vfs_strerror(xt_vfs_err_t err)
获取错误码对应的字符串描述
xt_vfs_err_t xt_vfs_ftruncate(xt_vfs_fd_t fd, xt_vfs_off_t length)
截断已打开的文件
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_truncate(const char *path, xt_vfs_off_t length)
截断文件到指定大小
xt_vfs_err_t xt_vfs_unmount(const char *path)
卸载后端文件系统
struct xt_vfs_dirent xt_vfs_dirent_t
目录项信息
uint32_t xt_vfs_mode_t
文件模式类型(权限 + 类型)
xt_vfs_err_t xt_vfs_fstat(xt_vfs_fd_t fd, xt_vfs_stat_t *stat)
获取已打开文件的状态
xt_vfs_ssize_t xt_vfs_write(xt_vfs_fd_t fd, const void *buf, xt_vfs_size_t size)
写入文件
xt_vfs_err_t xt_vfs_mkdir(const char *path)
创建目录
int32_t xt_vfs_off_t
偏移量类型
xt_vfs_ssize_t xt_vfs_tell(xt_vfs_fd_t fd)
获取当前文件位置
xt_vfs_dir_t * xt_vfs_opendir(const char *path)
打开目录
xt_vfs_err_t xt_vfs_rewinddir(xt_vfs_dir_t *dir)
重置目录读取位置
xt_vfs_err_t xt_vfs_deinit(void)
销毁 VFS 实例
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_rename(const char *old_path, const char *new_path)
重命名文件
int32_t xt_vfs_err_t
错误码类型,详细错误码见 XT_VFS_ERR_* 系列宏
xt_vfs_err_t xt_vfs_fsync(xt_vfs_fd_t fd)
同步单个文件到存储设备
xt_vfs_err_t xt_vfs_sync_all(const char *path)
同步所有文件到存储设备
xt_vfs_err_t xt_vfs_access(const char *path, xt_vfs_mode_t amode)
检查文件访问权限
xt_vfs_ssize_t xt_vfs_seek(xt_vfs_fd_t fd, xt_vfs_off_t offset, xt_vfs_whence_t whence)
文件定位
xt_vfs_err_t xt_vfs_close(xt_vfs_fd_t fd)
关闭文件
xt_vfs_err_t xt_vfs_mount(const char *path, const xt_vfs_ops_t *ops, void *ctx)
挂载后端文件系统
xt_vfs_err_t xt_vfs_stat(const char *path, xt_vfs_stat_t *stat)
获取文件状态
uint32_t xt_vfs_time_t
时间类型(固定 32 位)
int32_t xt_vfs_ino_t
inode 编号类型
xt_vfs_err_t xt_vfs_errno(void)
获取当前线程的最后一个错误码
uint32_t xt_vfs_size_t
文件大小类型(无符号)
struct xt_vfs_dir xt_vfs_dir_t
目录句柄(opaque,内部字段不暴露)
struct xt_vfs_statfs xt_vfs_statfs_t
文件系统状态信息
xt_vfs_err_t xt_vfs_statfs(const char *path, xt_vfs_statfs_t *statfs)
获取文件系统状态
xt_vfs_fd_t xt_vfs_open(const char *path, xt_vfs_mode_t flags)
打开文件
struct xt_vfs_utimbuf xt_vfs_utimbuf_t
文件时间信息
int32_t xt_vfs_ssize_t
文件大小类型(有符号)
目录项信息
xt_vfs_ino_t d_ino
char d_name[64]
xt_vfs_off_t(* telldir)(void *ctx, void *dh)
获取目录读取位置
xt_vfs_err_t(* ftruncate)(void *ctx, void *fh, xt_vfs_off_t length)
截断已打开的文件
xt_vfs_ssize_t(* seek)(void *ctx, void *fh, xt_vfs_off_t offset, xt_vfs_whence_t whence)
文件定位
xt_vfs_ssize_t(* tell)(void *ctx, void *fh)
获取当前文件位置
xt_vfs_err_t(* mount)(void *ctx)
挂载后端
xt_vfs_err_t(* truncate)(void *ctx, const char *path, xt_vfs_off_t length)
截断文件到指定大小
xt_vfs_err_t(* open)(void *ctx, const char *path, xt_vfs_mode_t flags, void **fh)
打开文件
xt_vfs_err_t(* remove)(void *ctx, const char *path)
删除文件
xt_vfs_err_t(* fstat)(void *ctx, void *fh, xt_vfs_stat_t *stat)
获取已打开文件的状态
xt_vfs_err_t(* seekdir)(void *ctx, void *dh, xt_vfs_off_t loc)
设置目录读取位置
xt_vfs_err_t(* closedir)(void *ctx, void *dh)
关闭目录
xt_vfs_err_t(* access)(void *ctx, const char *path, xt_vfs_mode_t amode)
检查文件访问权限
xt_vfs_err_t(* unmount)(void *ctx)
卸载后端
xt_vfs_err_t(* mkdir)(void *ctx, const char *path)
创建目录
xt_vfs_err_t(* fsync)(void *ctx, void *fh)
同步单个文件到存储设备
xt_vfs_ssize_t(* read)(void *ctx, void *fh, void *buf, xt_vfs_size_t size)
读取文件
xt_vfs_err_t(* rmdir)(void *ctx, const char *path)
删除空目录
xt_vfs_err_t(* close)(void *ctx, void *fh)
关闭文件
xt_vfs_ssize_t(* write)(void *ctx, void *fh, const void *buf, xt_vfs_size_t size)
写入文件
xt_vfs_err_t(* sync_all)(void *ctx, const char *path)
同步所有文件到存储设备
xt_vfs_err_t(* utime)(void *ctx, const char *path, const xt_vfs_utimbuf_t *buf)
更新文件时间
xt_vfs_err_t(* opendir)(void *ctx, const char *path, void **dh)
打开目录
xt_vfs_err_t(* rename)(void *ctx, const char *old_path, const char *new_path)
重命名文件
xt_vfs_err_t(* stat)(void *ctx, const char *path, xt_vfs_stat_t *stat)
获取文件状态
xt_vfs_err_t(* statfs)(void *ctx, xt_vfs_statfs_t *statfs)
获取文件系统状态
文件状态信息
xt_vfs_time_t st_atime
xt_vfs_mode_t st_mode
xt_vfs_time_t st_mtime
xt_vfs_time_t st_ctime
xt_vfs_size_t st_size
文件系统状态信息
xt_vfs_size_t f_bsize
xt_vfs_size_t f_bfree
xt_vfs_size_t f_blocks
xt_vfs_size_t f_ffree
xt_vfs_size_t f_files
文件时间信息
xt_vfs_time_t modtime
xt_vfs_time_t actime
xt_vfs 可移植层——锁宏、内存宏、线程上下文
struct xt_vfs_config xt_vfs_config_t
VFS 初始化配置
#define XT_VFS_FILENAME_MAX
最大文件名长度(含结尾 '\0')