新建config.lua配置文件,文件内容:
background = {r=100,g=200,b=155}同目录新建test.c文件
#include <stdio.h> #include <string.h> #include "lua.h" #include "lauxlib.h" #include "lualib.h" lua_State *L = NULL; /*获取table对应key的值, 假设table位于栈顶*/ int getfield(lua_State *L,const char *key){ int result; //lua_pushstring(L,key);//background位于栈顶, 把key压入栈后,background索引变为-2 //lua_gettable(L,-2);//获取background[key] //和以下一句话等价 lua_getfield(L,-1,key); if(!lua_isnumber(L,-1)){ error(L,"invalid component in background color"); } result = (int)lua_tonumber(L,-1);//保存获取到的数据 lua_pop(L,1);//删除栈 return result; } static void loadConfig(int *r,int *g,int *b){ //读取config.lua文件的全局变量 lua_getglobal(L,"background");//把table压入栈 if(!lua_istable(L,-1)){ error(L,"background should be a table \n"); } *r=getfield(L,"r");//获取table的值 *g=getfield(L,"g"); *b=getfield(L,"b"); } int main(void){ L = luaL_newstate(); //打开Lua,创建一个新环境(新的Lua状态) //luaL_openlibs(L); //打开标准库, 如: print, pcall //加载config.lua文件 if (luaL_loadfile(L,"config.lua") || lua_pcall(L,0,0,0)) { error(L,"can not run config file: %s",lua_tostring(L,-1)); } int red=0; int green=0; int blue=0; loadConfig(&red,&green,&blue);//从lua文件中加载配置 printf("red:%d,green:%d,blue:%d",red,green,blue); lua_close(L);//关闭lua状态 return 0; }编译代码:
gcc -lm -g -o test test.c /usr/local/lib/liblua.a -ldl