美文网首页
lua学习笔记3-c使用lua作为配置文件

lua学习笔记3-c使用lua作为配置文件

作者: 绿箭ML | 来源:发表于2017-11-17 03:10 被阅读376次

c使用lua作为作为配置文件

读取配置文件感觉有点坑, 利用已学习的lua,作为配置文件,思路是这样的:
配置文件正确性的判断,用lua写,检查配置文件正确性也用lua写,然后c通过操作lua状态机堆栈对去读取相关配置

1.C创建lua虚拟机
2.C通过调用lua的luaL_dofile函数,把结果(一个table)返回

  1. 执lua脚本检查配置文件,把最终的结果(table)留在堆栈
    4.c通过操作堆栈,把结果读出
#include <stdio.h>
//lua
#include <lua5.3/lua.h>
#include <lua5.3/lualib.h>
#include <lua5.3/lauxlib.h>
#include <lua5.3/luaconf.h>

//配置文件table名称m_name
int loadprofile(lua_State *L,const char *m_name){
    if (LUA_OK != luaL_dofile(L,"./hello.lua")) return 0;
    //执行完了必须要留下一个table
    if (lua_gettop(L) ==0 || lua_type(L,-1)!=LUA_TTABLE) return 0;
    lua_setglobal(L,m_name);//弹出保存到全局表
    return 1;
}

int main()
{
    lua_State *L;       //创建虚拟机
    L = luaL_newstate();
    luaL_openlibs(L);
    loadprofile(L,"hello");
    if (lua_getglobal(L,"hello")!= LUA_TTABLE){
        printf("读取配置文件失败");
        goto end;
    }
    //取出配置文件
    //读取ip
    lua_pushstring(L,"ip");
    if (lua_gettable(L,-2)==LUA_TSTRING){
        printf("IP:%s\n",lua_tostring(L,-1));
    }

    lua_pop(L,1);//弹出栈顶元素
    //读取端口
    lua_pushstring(L,"port");
    if (lua_gettable(L,-2)==LUA_TNUMBER){
        printf("port:%d\n",lua_tointeger(L,-1));
    }
    lua_pop(L,1);
    //销毁状态机
    end:
    lua_close(L);
    return 0;
}

lua脚本

-- a是配置
a={ip="127.0.0.1",port=22,name="我的电脑"}

-- 以下是配置检查
print("检查配置:")
function checkpro(pro)
    --检查端口正确性
    if type(pro.port) ~= "number" or pro.port > 65535 or pro.port < 0 then
        print("端口必须为整数");
        return nil
    end
    -- 检查ip
    head,tail,A,B,C,D=string.find(pro.ip,"(%d+)%.(%d+)%.(%d+)%.(%d+)")
    --检查函数
    local ck = function(n)
            if tonumber(n)>255 or tonumber(n)<0 then
                return false
            end
            return true
        end

    if ck(A) and ck(B) and ck(C) and ck(D) then
        --重新格式化字符串避免有空格出错
        pro.ip=string.format("%d.%d.%d.%d",A,B,C,D)
    else
        print(string.format("IP范围有错:%s.%s.%s.%s",A,B,C,D))
        return nil
    end
    print("测试pass")
    return pro
end

return checkpro(a)

当然,在arpa/inet.h下,有字符串转换ip的函数,这里功能不全,仅仅测试学习
以下是执行结果


配置测试通过 ip范围有误

相关文章

  • lua学习笔记3-c使用lua作为配置文件

    c使用lua作为作为配置文件 读取配置文件感觉有点坑, 利用已学习的lua,作为配置文件,思路是这样的:配置文件正...

  • Lua扩展

    lua作为配置文件使用 使用LUA API分析这个文件,并获取width和height table操作lua 5....

  • Lua C接口API 4

    前面介绍了当lua文件做配置使用时,该如何使用 API 接口去获取配置文件信息, lua 文件作为配置文件使用还是...

  • lua学习笔记3-c调用lua

    lua C api PS:这里是默认我已经学完了lua脚本的基本知识(包括table,元表,函数,基本库, 文件i...

  • 2017.5.25

    lua学习总结:数据结构: 使用Lua实现链表(单向链表和双向链表),队列 使用Lua保存图,用table保存,每...

  • lua脚本

    lua脚本 执行方法下载lua 打开cmd 或者命令界面 执行lua使用lua 文件

  • coolshell lua教程笔记

    collshell lua教程笔记 标签(空格分隔): lua todo 变量 数字 lua的数字只有double...

  • Lua与C#的交互实现

    lua与C#交互使用LuaInterface实现定义变量:1,Lua lua = new Lua() --定义一个...

  • redisgo操作LUA脚本

    LUA脚本基础学习:LUA脚本--菜鸟教程[https://www.runoob.com/lua/lua-tuto...

  • C++调用lua方式

    目标 使用C++调用lua接口 示例 lua代码(test.lua) C++调用示例(lua_test.cpp) ...

网友评论

      本文标题:lua学习笔记3-c使用lua作为配置文件

      本文链接:https://www.haomeiwen.com/subject/zfrdvxtx.html