lua内嵌工程 配置 记录

请添加图片描述

嵌入的lua 主要是以配置为主,调试为主,后期在核心逻辑上加入,补丁功能,分享一下 我现在写的基础版本,其他大家,自由发挥

#include "mod_lua.h"
#include <time.h>
#include <unistd.h>

lua_State *lua_interface_stack;

int init_lua_state(void) {
  lua_interface_stack = luaL_newstate();
  if (lua_interface_stack != NULL) {
    luaL_openlibs(lua_interface_stack);
    return 0;
  }
  return -1;
}

int free_lua_state(void) {
  lua_close(lua_interface_stack);
  return 0;
}

static int lsleep_sec(lua_State *L) {
  int cnts = luaL_checknumber(L, 1);
  sleep(cnts);
  return 1;
}

static int lsleep_usec(lua_State *L) {
  int cnts = luaL_checknumber(L, 1);
  usleep(cnts);
  return 1;
}

/**
 *
 *
 */
static const lua_func_info_t lua_func[] = {{"lsleep_sec", lsleep_sec},
                                           {"lsleep_usec", lsleep_usec}};

int lua_functions(lua_State *L) {
  int n = sizeof(lua_func) / sizeof(lua_func[0]);
  while (n--) {
    lua_register(L, lua_func[n].name, lua_func[n].func);
  }
  return 1;
}

lua_module_register(lua_functions);

static void register_lib(lua_State *L, const char *name, lua_CFunction f) {
  lua_getglobal(L, "package");
  lua_getfield(L, -1, "preload");
  lua_pushcfunction(L, f);
  lua_setfield(L, -2, name);
  lua_pop(L, 2);
}

static int first_reg_func(lua_State *L) {
  fprintf(stderr, "Hello World\n");
  return 1;
}

static const struct luaL_Reg tdd_debug[] = {{"first_reg_func", first_reg_func},
                                            {NULL, NULL}};

static int luaopen_tdd_debug(lua_State *L) {
  luaL_newlib(L, tdd_debug);
  return 1;
}

static const lua_func_info_t lua_libs[] = {{"tdd_debug", luaopen_tdd_debug}};

int Lua_libs(lua_State *L) {
  int n = sizeof(lua_libs) / sizeof(lua_libs[0]);
  while (n--) {
    register_lib(L, lua_libs[n].name, lua_libs[n].func);
  }
  return 0;
}

lua_module_register(Lua_libs);

int init_lua_module(void) {
  if (init_lua_state() == 0) {
    lua_module *st = (lua_module *)&mod_lua_start;
    lua_module *end = (lua_module *)&mod_lua_end;
    lua_module *it = NULL;

    for (it = st; it < end; it++) {
      (*it)(lua_interface_stack);
    }
  } else {
    fprintf(stderr, "[Lua error] %s \n", lua_tostring(lua_interface_stack, -1));
    lua_pop(lua_interface_stack, 1); // pop error frome stack
    free_lua_state();
    return -1;
  }
  return 0;
}

int load_lua_config(const char *filename) {
  if (lua_interface_stack == NULL || filename == NULL) {
    fprintf(stderr, "[Lua error] nil Lua stack or filename ... ...\n");
    return -1;
  }

  if (luaL_dofile(lua_interface_stack, filename)) {
    fprintf(stderr, "[Lua error] %s \n", lua_tostring(lua_interface_stack, -1));
    lua_pop(lua_interface_stack, 1); // pop error from lua stack
    return -2;
  }
  return 0;
}
function Sleep(n)
   os.execute("sleep " .. n)
end

print("first lua print \n")

t = {10,"hi",1.0}

for k,v in ipairs(t) do
   print(k,v)
end

lsleep_usec(1000*500)
print("I am here ... ...")

local test_libs = require("tdd_debug")

test_libs.first_reg_func()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值