luat_lib_fs.c 2.8 KB

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