luat_lib_fs.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. @module fs
  3. @summary 文件系统额外操作
  4. @version 1.0
  5. @date 2021.03.30
  6. @demo fs
  7. @tag LUAT_USE_FS
  8. */
  9. #include "luat_base.h"
  10. #include "luat_fs.h"
  11. #include "luat_mem.h"
  12. #define LUAT_LOG_TAG "fs"
  13. #include "luat_log.h"
  14. /*
  15. 获取文件系统信息
  16. @api fs.fsstat(path)
  17. @string 路径,默认"/",可选
  18. @return boolean 获取成功返回true,否则返回false
  19. @return int 总的block数量
  20. @return int 已使用的block数量
  21. @return int block的大小,单位字节
  22. @return string 文件系统类型,例如lfs代表littlefs
  23. @usage
  24. -- 打印根分区的信息
  25. log.info("fsstat", fs.fsstat("/"))
  26. */
  27. static int l_fs_fsstat(lua_State *L) {
  28. const char* path = luaL_optstring(L, 1, "/");
  29. luat_fs_info_t info = {0};
  30. if (luat_fs_info(path, &info) == 0) {
  31. lua_pushboolean(L, 1);
  32. lua_pushinteger(L, info.total_block);
  33. lua_pushinteger(L, info.block_used);
  34. lua_pushinteger(L, info.block_size);
  35. lua_pushstring(L, info.filesystem);
  36. return 5;
  37. } else {
  38. lua_pushboolean(L, 0);
  39. return 1;
  40. }
  41. }
  42. /*
  43. 获取文件大小
  44. @api fs.fsize(path)
  45. @string 文件路径
  46. @return int 文件大小,若获取失败会返回0
  47. @usage
  48. -- 打印main.luac的大小
  49. log.info("fsize", fs.fsize("/main.luac"))
  50. */
  51. static int l_fs_fsize(lua_State *L) {
  52. const char* path = luaL_checkstring(L, 1);
  53. lua_pushinteger(L, luat_fs_fsize(path));
  54. return 1;
  55. }
  56. //---- 其他API尚不完善,暂不注释
  57. static int l_fs_mkdir(lua_State *L) {
  58. const char* path = luaL_checkstring(L, 1);
  59. lua_pushinteger(L, luat_fs_mkdir(path));
  60. return 1;
  61. }
  62. static int l_fs_rmdir(lua_State *L) {
  63. const char* path = luaL_checkstring(L, 1);
  64. lua_pushinteger(L, luat_fs_rmdir(path));
  65. return 1;
  66. }
  67. static int l_fs_mkfs(lua_State *L) {
  68. luat_fs_conf_t conf = {0};
  69. conf.busname = (char*)luaL_checkstring(L, 1);
  70. conf.filesystem = (char*)luaL_checkstring(L, 2);
  71. lua_pushinteger(L, luat_fs_mkfs(&conf));
  72. return 1;
  73. }
  74. static int l_fs_mount(lua_State *L) {
  75. luat_fs_conf_t conf = {0};
  76. conf.busname = (char*)luaL_checkstring(L, 1);
  77. conf.filesystem = (char*)luaL_checkstring(L, 2);
  78. conf.mount_point = (char*)luaL_checkstring(L, 3);
  79. conf.type = (char*)luaL_checkstring(L, 4);
  80. lua_pushinteger(L, luat_fs_mount(&conf));
  81. return 1;
  82. }
  83. static int l_fs_umount(lua_State *L) {
  84. luat_fs_conf_t conf = {0};
  85. conf.mount_point = (char*)luaL_checkstring(L, 1);
  86. lua_pushinteger(L, luat_fs_umount(&conf));
  87. return 1;
  88. }
  89. #include "rotable2.h"
  90. static const rotable_Reg_t reg_fs[] =
  91. {
  92. { "fsstat", ROREG_FUNC(l_fs_fsstat )},
  93. { "fsize", ROREG_FUNC(l_fs_fsize )},
  94. { "mkdir", ROREG_FUNC(l_fs_mkdir )},
  95. { "rmdir", ROREG_FUNC(l_fs_rmdir )},
  96. { "mkfs", ROREG_FUNC(l_fs_mkfs )},
  97. { "mount", ROREG_FUNC(l_fs_mount )},
  98. { "umount", ROREG_FUNC(l_fs_umount )},
  99. { NULL, ROREG_INT(0) }
  100. };
  101. LUAMOD_API int luaopen_fs( lua_State *L ) {
  102. luat_newlib2(L, reg_fs);
  103. return 1;
  104. }