LUA解析配置文件-C語言調用

前幾天也轉載過LUA的一片文章,但自己驗證時發現上面寫的例子缺少一些東西直接跑不通,不過我已經修正。

詳細的教程可參見:http://www.troubleshooters.com/codecorn/lua/lua_c_calls_lua.htm

話不多說,看代碼吧:

(以下代碼已上傳至:https://github.com/szhu/ez-lua

--parser.lua
local file=io.open("./test.conf", "r");

modulename="NOT Found";
port=-1;

function get_modulename(line)
    if (string.find(line, "lib.*.so$")) then
	modulename = string.sub(line, string.find(line, "lib.*.so$"));
    end
end

function get_port(line)
    if (string.find(line, "^port=%d+$")) then
        sport = string.sub(line, string.find(line, "%d+$"));
        port = tonumber(sport);
    end
end

for line in file:lines() do
    get_modulename(line);
    get_port(line);
end

file:close();

接着是配置文件

//test.conf

name:libaccess_udp_plugin.so
port=2000


C語言主調程序

#include <stdio.h>
#include <string.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>

#define err_exit(num,fmt,args...)  \
    do{printf("[%s:%d]"fmt"\n",__FILE__,__LINE__,##args);exit(num);} while(0)

#define err_return(num,fmt,args...)  \
    do{printf("[%s:%d]"fmt"\n",__FILE__,__LINE__,##args);return(num);} while(0)

int main(int argc, char* argv[]){
    lua_State * L;

    L = luaL_newstate() ;         /* Create Lua state variable */
    if ( L == NULL ) err_return(-1,"luaL_newstat() failed");
    luaL_openlibs(L);             /* Load Lua libraries */

    int ret = 0 ;
    ret = luaL_loadfile(L, "./parser.lua") ;      /* Load but don't run the Lua script */
    if ( ret != 0 ) err_return(-1,"luaL_loadfile failed") ;
    ret = lua_pcall(L, 0, 0, 0) ;                 /* Run the loaded Lua script */
    if ( ret != 0 ) err_return(-1,"lua_pcall failed:%s",lua_tostring(L,-1)) ;


    lua_getglobal(L,"modulename");              //獲取lua中定義的變量
    lua_getglobal(L,"port");

    printf("modulename:%s port=%d\n", lua_tostring(L,-2), lua_tointeger(L,-1)) ;
    lua_pop(L,1) ;

    printf("C Language main\n");
    return 0;
}

Makefile

CC=gcc  
CFLAGS  = $(shell pkg-config --cflags lua5.1)  
LDFLAGS = $(shell pkg-config --libs lua5.1)
  
all:luaconf 
  
luaconf:luaconf.o  
	$(CC) $< $(LDFLAGS) -o $@  
  
%.o: %.c  
	$(CC) $< $(CFLAGS) -c -o $@  
          
clean:
	rm -rf *.o  $(EXAMPLES)  


流媒體
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章