C說話拓展完成Lua sleep函數。本站提示廣大學習愛好者:(C說話拓展完成Lua sleep函數)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話拓展完成Lua sleep函數正文
這幾天在做一個小項目,個中用到了一些根本的API, 例如sleep,獲得以後目次等等,lua尺度庫中沒有供給這些接口,固然所第三方庫中也都有完成,然則要用的就那末幾個函數,在一個嵌入式體系中裝置那末多第三方庫有點糟蹋資本,因而@成功哥 寫了一個socket的C完成,然後給我用。我試著把其他幾個函數也用C完成,起首看下怎樣用C寫lua的拓展。
C 部門
起首是依據Lua C說話的協定寫好挪用模塊,編譯成.so 文件,然後才可以在lua劇本中挪用。 上面是在Ubuntu14.04 **體系中,基於lua5.1** 寫的一個sleep完成。
*sleep.c 文件 *
/*進修寫lua c拓展,關於一些簡略的函數本身供給C拓展
*ubuntu 編譯 $ gcc -fPIC -shared -llua sleep.c -o orangleliu.so -I/usr/include/lua5.1 -std=gnu99
*/
#include "unistd.h"
/*這個三個是必需的頭文件*/
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
/*simple sleep*/
static int sleep_c (lua_State *L){
long secs = lua_tointeger(L, -1); /*獲得參數*/
sleep(secs);
return 0; /*前往0個值,所認為0*/
}
static const struct luaL_Reg libs[] = {
{"sleep", sleep_c},
{NULL, NULL} /*the end*/
};
int luaopen_orangleliu (lua_State *L){
/*注冊lib, 下面luaopen_稱號 跟上面注冊的稱號要分歧, 還要和編譯的.so文件名分歧*/
luaL_register(L, "orangleliu", libs);
return 1;
}
編譯
$ gcc -fPIC -shared -llua sleep.c -o orangleliu.so -I/usr/include/lua5.1 -std=gnu99
lua 挪用
test.lua
require "orangleliu"
print(os.time())
orangleliu.sleep(1)
print(os.time())
挪用成果
$ lua test.lua
1427118862
1427118863
小結
根本的模板就是如許的,龐雜一些就是多個參數和多個前往值。 假如有C基本,寫起來照樣挺快的,不外如果跨平台處置起來也挺費事的。 年夜家可以在github上搜下他人寫的lua拓展庫,參考下。