最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言拓展實現(xiàn)Lua sleep函數(shù)

 更新時間:2015年04月29日 08:56:56   投稿:junjie  
這篇文章主要介紹了C語言拓展實現(xiàn)Lua sleep函數(shù),本文使用C語言寫出sleep函數(shù),編譯后在Lua中調(diào)用,需要的朋友可以參考下

這幾天在做一個小項目,其中用到了一些基本的API, 例如sleep,獲取當(dāng)前目錄等等,lua標(biāo)準(zhǔn)庫中沒有提供這些接口,雖然所第三方庫中也都有實現(xiàn),但是要用的就那么幾個函數(shù),在一個嵌入式系統(tǒng)中安裝那么多第三方庫有點浪費資源,于是@勝利哥 寫了一個socket的C實現(xiàn),然后給我用。我試著把其他幾個函數(shù)也用C實現(xiàn),首先看下怎么用C寫lua的拓展。

C 部分

首先是根據(jù)Lua C語言的協(xié)議寫好調(diào)用模塊,編譯成.so 文件,然后才可以在lua腳本中調(diào)用。 下面是在Ubuntu14.04 **系統(tǒng)中,基于lua5.1** 寫的一個sleep實現(xiàn)。

復(fù)制代碼 代碼如下:

*sleep.c 文件 *
/*學(xué)習(xí)寫lua c拓展,對于一些簡單的函數(shù)自己提供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); /*獲取參數(shù)*/
    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;
}

編譯

復(fù)制代碼 代碼如下:

$ gcc -fPIC -shared -llua sleep.c -o orangleliu.so -I/usr/include/lua5.1 -std=gnu99

lua 調(diào)用
復(fù)制代碼 代碼如下:

test.lua
require "orangleliu"
print(os.time())
orangleliu.sleep(1)
print(os.time())

調(diào)用結(jié)果

復(fù)制代碼 代碼如下:

$ lua test.lua
1427118862
1427118863

小結(jié)

基本的模板就是這樣的,復(fù)雜一些就是多個參數(shù)和多個返回值。 如果有C基礎(chǔ),寫起來還是挺快的,不過要是跨平臺處理起來也挺麻煩的。 大家可以在github上搜下別人寫的lua拓展庫,參考下。

相關(guān)文章

最新評論

西安市| 海口市| 都昌县| 醴陵市| 建水县| 当涂县| 乌兰察布市| 丹东市| 刚察县| 遂平县| 南开区| 金平| 景泰县| 囊谦县| 潮安县| 沁源县| 寿光市| 延边| 凌云县| 全州县| 故城县| 通河县| 包头市| 苏州市| 安新县| 康保县| 三穗县| 眉山市| 绥棱县| 武义县| 会泽县| 乌拉特前旗| 民乐县| 尖扎县| 册亨县| 昌邑市| 佛冈县| 麻阳| 青田县| 娱乐| 新巴尔虎右旗|