我已经完成了作业并研究了有关此主题的其他回复,但没有一个解决我的特定问题。
我想完全删除 io 库,只删除部分操作系统(假设我想保留 os.clock() 和其他)
我怎样才能仅通过 C API 实现这一点。
由于项目的性质,我不允许修改 Lua 标头和将发送给我的脚本。这些都不是我能控制的。我唯一可以修改的是解释器。
做这样的事情:
lua_pushnil(state_pointer);
lua_setglobal(state_pointer, "os.execute");
不会有太大帮助,因为在脚本中用户可以调用 os = require('os') 并取回所有函数
我不允许禁用 require 功能,因此这使事情变得更加困难。
有任何想法吗?
PS:更多的好奇心:如果我做类似的事情
luaopen_base(L);
luaopen_table(L);
luaopen_string(L);
luaopen_math(L);
luaopen_loadlib(L); (basically i'm loading every library by hand except os and io)
代替
luaL_openlibs(L); (this loads all the libraries)
os = require('os') 或 io = require('io') 还能工作吗?
@Nicol Bolas 不知道我是否做错了什么,但 os = require('os') & require('io') 只是把一切都带回来了。
我的代码:
luaL_openlibs(LuaInstance); /* load the libs */
lua_pushnil(LuaInstance);
lua_setglobal(LuaInstance, "io");
lua_pushnil(LuaInstance);
lua_setglobal(LuaInstance, "os.execute");
lua_pushnil(LuaInstance);
lua_setglobal(LuaInstance, "os.rename");
lua_pushnil(LuaInstance);
lua_setglobal(LuaInstance, "os.remove");
lua_pushnil(LuaInstance);
lua_setglobal(LuaInstance, "os.exit");
在我的脚本中,我只是做一个
os = require('os')
io = require('io')
在此之后 os 函数和 io 函数都可以工作。os.exit 仍然关闭我的应用程序,并且 io.write 照常工作