a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C語言拓展實現Lua sleep函數

2020-01-26 15:07:03
字體:
來源:轉載
供稿:網友

這幾天在做一個小項目,其中用到了一些基本的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拓展庫,參考下。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 国产另类一区 | 最新日韩av在线 | 999国产一区二区三区四区 | 亚洲人免费视频 | 在线欧美视频 | 精品99久久| 日本精品免费 | 欧美久久精品 | 欧美性猛交xxxx免费看漫画 | 国产日韩欧美在线观看 | 伊人影院在线视频 | 日韩国产一区二区 | 亚洲男人天堂2023 | 18视频免费网址在线观看 | 亚洲精品午夜视频 | 综合一区二区三区 | 免费特级黄毛片 | 亚洲生活片| 色噜噜网站 | 亚洲午夜精品久久久久久app | 啵啵影院午夜男人免费视频 | 国产精品视频一区二区三区 | 成人自拍偷拍 | 玖玖国产精品视频 | 国产精品视频一区二区三区麻豆 | 亚州中文字幕 | 国产精品无码专区在线观看 | 亚洲精品乱码久久久久久 | 天天操,夜夜操 | 91久久久久久久久久久 | 蜜桃视频麻豆女神沈芯语免费观看 | 欧美日韩视频 | 精品一区二区久久久久久久网站 | 亚洲九九精品 | 91在线观看 | 日韩免费高清 | 国产乱码精品一品二品 | 国产日产欧美a级毛片 | 一区二区免费视频 | 欧美日韩一区二区三区 | 在线无码 |