LUA解析配置檔案-C語言呼叫
前幾天也轉載過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 [email protected] %.o: %.c $(CC) $< $(CFLAGS) -c -o [email protected] clean: rm -rf *.o $(EXAMPLES)
相關推薦
LUA解析配置檔案-C語言呼叫
前幾天也轉載過LUA的一片文章,但自己驗證時發現上面寫的例子缺少一些東西直接跑不通,不過我已經修正。 話不多說,看程式碼吧: --parser.lua local file=io.open("./test.conf", "r"); modulename="NOT F
Ubuntu 使用 C語言呼叫 Shell 檔案 ,sudo 免密碼輸入,為 shell 檔案加殼繞過chmod 4755 許可權問題
需求: 當我們需要指令碼檔案輸入 su 或 sudo 的時候 ,會出現密碼輸入問題 ,如何實現自動輸入密碼? ps : 需求用在 二進位制檔案 呼叫 Shell 檔案的,為shell 檔案加殼繞過chmod 4755 許可權問題 建立 C檔案 #include
python flask 解析配置檔案與寫日誌
test.conf [kafka]kafka_sys_topic = test-sys-infokafka_sys_group = test-consumer-groupzookeeper_server = 192.168.1.1:2181,192.168.1.2:2181,192.168.1
增加程式碼的通用性-解析配置檔案
時間:2018年11月02日 比方說有這樣一堆資料: arr: [{ id: '1', type: 'a', arr: [1, 2, 3, 4] }, { id: '2', type: 'b', arr: [1, 2, 3, 4, 5] }] 複製程式碼 集合裡面每個元素都有兩個屬性
解析配置檔案自動裝配 DataSource + AbstractRoutingDataSource + AOP 實現動態資料來源 上:原理解析,解析資料來源
spring boot 自動裝配會通過 spring.datasource.*為我們自動裝配資料來源,所以想要動態的切換資料來源,第一件事是配置資料來源,其次是怎麼切換?最後何時切換? 原理解析(使用 AbstractRoutingDataSource 實現) spring-jd
解析配置檔案自動裝配 DataSource + AbstractRoutingDataSource + AOP 實現動態資料來源 下:配置動態資料來源,AOP 進行使用
上篇文章中已經藉助 DynamicDataSourceBuilder 類從配置檔案中解析得到了預設資料來源和動態資料來源,接下來需要配置動態資料來源的“本體”,並藉助 AOP 動態的切換資料來源。 配置動態資料來源 AbstractRoutingDataSource 實現了 In
.NET Core實戰專案之CMS 第三章 入門篇-原始碼解析配置檔案及依賴注入
作者:依樂祝 原文連結:https://www.cnblogs.com/yilezhu/p/9998021.html 寫在前面 上篇文章我給大家講解了ASP.NET Core的概念及為什麼使用它,接著帶著你一步一步的配置了.NET Core的開發環境並建立了一個ASP.NET Core的mvc專
C語言呼叫GO語言生成的C靜態庫
一開始看別人的例子,自己弄總是不成功,後來也是去GO語言社群看多幾個例子,找找規律,才把幾個自己沒注意到的細(keng)節填起來了。 GO語言寫一個函式 cktest.go package main import ( "C" "fmt" ) //exp
Redis學習四:解析配置檔案 redis.conf
一、它在哪 地址: 思考:為什麼要將它拷貝出來單獨執行? 二、Units單位 1 配置大小單位,開頭定義了一些基本的度量單位,只支援bytes,不支援bit 2 對大小寫不敏感 三、INCLUDES包含 和我們的Struts2配置檔案類似,可以通過includes包含
mybatis原始碼-解析配置檔案(三)之配置檔案Configuration解析(超詳細, 值得收藏)
1. 簡介 1.1 系列內容 本系列文章講解的是mybatis解析配置檔案內部的邏輯, 即 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFact
mybatis 解析配置檔案(一)之XML的DOM解析方式
簡介 在之前的文章《mybatis 初步使用(IDEA的Maven專案, 超詳細)》中, 講解了mybatis的初步使用, 並總結了以下mybatis的執行流程: 通過 Resources 工具類讀取 mybatis-config.xml, 存入 Reader; SqlSessionFactoryBuil
C語言呼叫MySQL介面
說明:在做一個專案的過程中,用到了這部分知識,個人覺得網上關於這部分的介紹真的比較模糊,就自己總結一下專案中用到的這些介面的使用方法。 準備工作 這個專案是在Linux下開發,如果需要使
mybatis原始碼-解析配置檔案(二)之解析的流程
1. 簡介 在之前的文章《mybatis 初步使用(IDEA的Maven專案, 超詳細)》中, 講解了mybatis的初步使用, 並總結了以下mybatis的執行流程: 通過 Resources 工具類讀取 mybatis-config.xml,
linux下利用C或C++ 語言呼叫需要root許可權
一、簡介 linux對檔案的許可權控制比較嚴格,這樣避免了有特殊意圖的程式獲取root許可權,但在c++程式中希望獲取root的執行許可權去操作一些只有root可讀寫的檔案。 二、詳解 1、setuid法 (1)登入root使用者,將程式設定成ro
mybatis原始碼-解析配置檔案(四)之配置檔案Mapper解析
其中, mappers作為configuration節點的一部分配置, 在本文章中, 我們講解解析mappers節點, 即 xxxMapper.xml 檔案的解析。 1 解析入口 在解析 mybatis-config.xml 時, 會進行解析 xxxMapper.xml 的檔案。 在圖示流程的 XMLCo
mybatis原始碼-解析配置檔案(四-1)之配置檔案Mapper解析(cache)
1. 簡介 本文章主要講解的是, xxxMapper.xml 檔案中, cache 節點的原始碼。 2. 解析 XMLMapperBuilder.cacheElement() 方法主要負責解析 <cache> private void cacheElement(XNode context)
C語言呼叫C++中的函式,extern "C"的含義
C++編譯器在將cpp檔案編譯成庫時,匯出的函式名會改變,成員函式會通過加一些元素變成全域性函式,如果這時候我們需要用C語言呼叫C++的函式, 就有了一個問題,那就是不知道C++庫中匯出的函式名,這是由編譯器決定的,這個時候就需要用到extern關鍵字。例子: test.c
原生mybatis解析配置檔案的原理
最近閒來無事研究mybaits的執行流程和原始碼,這裡來記錄下一點點心得... 原生mybaits(沒有和任何框架整合的)的全域性配置檔案解析的流程如下: 首先容器啟動後mybatis底層建立sqlsessionfactorybuilder物件,該物件呼叫builder方
libcurl C語言呼叫
1、編寫程式碼 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> #define POSTURL "6
關於c語言呼叫main函式自身,一點
2018年11月02日 20:27:55 Drmon. 閱讀數:6 標籤: c語言 呼叫自身