Lua 挂载文件系统
Lua mount filesystem
我想使用 Lua 在 Linux 上安装一个文件系统,但我在 lua 5.4 manual or the LuaFileSytem 库中找不到任何功能。有什么方法可以在 Lua 或现有库中挂载文件系统吗?
与大多数 platform-dependent 系统调用一样,Lua 不会提供开箱即用的映射。
所以你需要一些 C-API 模块来完成这个任务。
看起来 https://github.com/justincormack/ljsyscall is generic "but" focused on LuaJIT and https://luaposix.github.io/luaposix/ 没有提供 mount
.
我最近也有类似的需求,结束做C模块:
static int l_mount(lua_State* L)
{
int res = 0;
// TODO add more checks on args!
const char *source = luaL_checkstring(L, 1);
const char *target = luaL_checkstring(L, 2);
const char *type = luaL_checkstring(L, 3);
lua_Integer flags = luaL_checkinteger(L, 4);
const char *data = luaL_checkstring(L, 5);
res = mount(source, target, type, flags, data);
if ( res != 0)
{
int err = errno;
lua_pushnil(L);
lua_pushfstring(L, "mount failed: errno[%s]", strerror(err));
return 2;
}
else
{
lua_pushfstring(L, "ok");
return 1;
}
}
#define register_constant(s)\
lua_pushinteger(L, s);\
lua_setfield(L, -2, #s);
// Module functions
static const luaL_Reg R[] =
{
{ "mount", l_mount },
{ NULL, NULL }
};
int luaopen_sysutils(lua_State* L)
{
luaL_newlib(L, R);
// do more mount defines mapping, maybe in some table.
register_constant(MS_RDONLY);
//...
return 1;
}
将其编译为 C Lua 模块,并且不要忘记您需要 CAP_SYS_ADMIN
来调用 mount
系统调用。
我想使用 Lua 在 Linux 上安装一个文件系统,但我在 lua 5.4 manual or the LuaFileSytem 库中找不到任何功能。有什么方法可以在 Lua 或现有库中挂载文件系统吗?
与大多数 platform-dependent 系统调用一样,Lua 不会提供开箱即用的映射。
所以你需要一些 C-API 模块来完成这个任务。
看起来 https://github.com/justincormack/ljsyscall is generic "but" focused on LuaJIT and https://luaposix.github.io/luaposix/ 没有提供 mount
.
我最近也有类似的需求,结束做C模块:
static int l_mount(lua_State* L)
{
int res = 0;
// TODO add more checks on args!
const char *source = luaL_checkstring(L, 1);
const char *target = luaL_checkstring(L, 2);
const char *type = luaL_checkstring(L, 3);
lua_Integer flags = luaL_checkinteger(L, 4);
const char *data = luaL_checkstring(L, 5);
res = mount(source, target, type, flags, data);
if ( res != 0)
{
int err = errno;
lua_pushnil(L);
lua_pushfstring(L, "mount failed: errno[%s]", strerror(err));
return 2;
}
else
{
lua_pushfstring(L, "ok");
return 1;
}
}
#define register_constant(s)\
lua_pushinteger(L, s);\
lua_setfield(L, -2, #s);
// Module functions
static const luaL_Reg R[] =
{
{ "mount", l_mount },
{ NULL, NULL }
};
int luaopen_sysutils(lua_State* L)
{
luaL_newlib(L, R);
// do more mount defines mapping, maybe in some table.
register_constant(MS_RDONLY);
//...
return 1;
}
将其编译为 C Lua 模块,并且不要忘记您需要 CAP_SYS_ADMIN
来调用 mount
系统调用。