lua简介
轻量脚本语言,基于C语言实现,为嵌入式应用程序而设计,使扩展和定制功能变得更灵活。
开发环境搭建
基于Linux进行lua安装
下载lua C源码包
cd lua-5.3.0
make linux test
make install
helloworld.lua
#!/usr/local/bin/lua
print("Hello World!")
执行文件:./helloworld.lua(若是没有指定源#!/usr/local/bin/lua, 使用lua helloworld.lua执行也是OK的)
输出:Hello World!
Lua概念
lua C包实现方法与使用
基于C语言实现lua扩展包
static int function_test(lua_State* L)
{
int value1 = luaL_checknumber(L, 1);
short value2 = luaL_checknumber(L, 2);//或者luaL_tonumber(L, 2);
char* value3 = luaL_tostring(L, 3);
printf("%d, %d, %s \n", value1, value2, value3);
return 1;
}
//注册函数结构体数组类型
static const struct luaL_Reg mt_lib[]=
{
{"send", function_test(lua_State*)},
{NULL, NULL} //必须以一对name和function皆为NULL结束
}
luaopen_luacso(lua_State* L) //设置基础标准库
{
luaL_register(L, "luacso", mt_lib);//注册函数
return 1;
}
C代码执行lua脚本
lua_State* L = luaL_newstate() //创造新的lua状态机
luaL_openlibs(L) //打开C API标准库
lua_register(L, "setmode", SetBandMode)//将函数设置到全局name中,(1.将函数压栈;2.从堆栈中弹出新值并设置到全局name)
luaL_dofile(lL, "Script_name.lua")//加载并运行指定的脚本文件
lua_close(L) //释放lua状态机资源
//其他lua接口
lua_tostring(lua_State* L, int ErrorCode)//将给定索引的Lua值转换为一个C字符串
lua_tonumber(lua_State *L, int index)//将索引处的lua值转换为C类型参数
C函数
static int SetBandMode(lua_State* L)
{
int n = lua_getopt(L);
char* dataString = (char*)lua_tostring(L,1);//取出L中的第一个元素
}
lua使用require实现so库加载调用
#!/usr/local/bin/lua
setmode({\"channelMode\":1});
package.cpath = '/data/Test/lua/?.so;'
local luacso = require("luacso") ///相当于调用C API 中的luaL_requiref()函数进行加载库
luacso.send(1,2,singaljson) ///signalJSON为JSON数据列表
参考链接
菜鸟教程 - lua教程:https://www.runoob.com/lua/lua-tutorial.html
lua5.3参考手册:https://www.runoob.com/manual/lua53doc/manual.html