luat_luadb.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #ifndef LUAT_LUADB_H
  2. #define LUAT_LUADB_H
  3. // LuaDB只读文件系统
  4. // 当前最新版本v2, Luatools 2.1.3及以上默认生成
  5. #define LUAT_LUADB_MIN_VERSION 2
  6. // 可同时打开的文件数量
  7. #ifndef LUAT_LUADB_MAX_OPENFILE
  8. #define LUAT_LUADB_MAX_OPENFILE 8
  9. #endif
  10. // 单个文件的数据结构
  11. typedef struct luadb_file {
  12. char name[32]; // 最大路径长度为31字节
  13. size_t size; // 最大体积为64kb
  14. const char* ptr; // 指向文件数据的起始位
  15. } luadb_file_t;
  16. // 文件句柄
  17. typedef struct luadb_fd
  18. {
  19. int fd; // 句柄编号
  20. luadb_file_t *file; // 文件指针
  21. size_t fd_pos; // 句柄的当前偏移量
  22. }luadb_fd_t;
  23. typedef struct luadb_fs
  24. {
  25. uint16_t version; // 文件系统版本号,当前支持v1/v2
  26. uint16_t filecount; // 文件总数,实际少于100
  27. luadb_fd_t fds[LUAT_LUADB_MAX_OPENFILE]; // 句柄数组
  28. luadb_file_t *inlines;
  29. luadb_file_t files[1]; // 文件数组
  30. } luadb_fs_t;
  31. // 从指定位置查询并构建文件系统
  32. luadb_fs_t* luat_luadb_mount(const char* ptr);
  33. // 卸载文件系统,之后fs不可用
  34. int luat_luadb_umount(luadb_fs_t *fs);
  35. // 重新挂载文件系统,只是强制清空全部句柄
  36. int luat_luadb_remount(luadb_fs_t *fs, unsigned flags);
  37. // 打开文件
  38. int luat_luadb_open(luadb_fs_t *fs, const char *path, int flags, int /*mode_t*/ mode);
  39. // 关闭文件
  40. int luat_luadb_close(luadb_fs_t *fs, int fd);
  41. // 读数据
  42. size_t luat_luadb_read(luadb_fs_t *fs, int fd, void *dst, size_t size);
  43. //size_t luat_luadb_write(void *fs, int fd, const void *data, size_t size);
  44. // 移动句柄
  45. long luat_luadb_lseek(luadb_fs_t *fs, int fd, long /*off_t*/ offset, int mode);
  46. // 获取文件信息
  47. luadb_file_t* luat_luadb_stat(luadb_fs_t *fs, const char *path);
  48. // 获取文件起始指针,通常只读
  49. char* luat_luadb_direct_io(luadb_fs_t *fs, int fd, size_t *len);
  50. #endif