分类
lua

C 内嵌lua入门

上周,撸了撸 openresty最佳实践。发现在nginx.conf文件里面可以直接写lua代码。然后在nginx的work线程里面执行lua 代码。
使用这种方式,极大的提升了程序的灵活性,且不需要使用者对C框架非常了解也可以做一些功能开发。
初步了解了一下方法例子如下:
C代码部分

#include <stdio.h>

#include <luajit-2.0/lua.h>        //包含lua开发的相关头文件
#include <luajit-2.0/lualib.h>
#include <luajit-2.0/lauxlib.h>

int luaadd(lua_State* L ,int x,int y)
{
    int sum;

    lua_getglobal(L,"add");         //获取lua脚本中的函数。在lua中函数也是全局变量

    lua_pushnumber(L,x);            //传入函数的第一个参数
    lua_pushnumber(L,y);            //传入函数的第二个参数
    lua_call(L,2,1);                //调用lua函数,2表示两个参数,1表示返回值
    sum =(int)lua_tonumber(L,-1);   //获取执行结果
    lua_pop(L,1);                   //清空函数调用栈
    return sum;
}
int main(int argc,char *argv[])
{
    lua_State* L;
    int sum;

    L = lua_open();     //打开lua虚拟机
    luaL_openlibs(L);   //加载lua库
    luaL_dofile(L,"add.lua");   //加载lua脚本文件
    sum=luaadd(L,10,15);        //调用lua中的函数。并获取返回值
    printf("The sum is %d\n",sum);  //打印函数执行结果
    lua_close(L);               //关闭lua
    return 0;
}

lua脚本

--add two numbers
function add(x,y)
    --将2个数相加并加上25
    return x+y+25
end

编译
gcc -c main.c
gcc -o main -lluajit-5.1
执行 ./main
The sum is 50

我们可以发现lua虚拟机完全嵌在主进程中执行,并没有创建新的进程或线程执行lua虚拟机。

发表评论

电子邮件地址不会被公开。 必填项已用*标注