程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話拓展完成Lua sleep函數

C說話拓展完成Lua sleep函數

編輯:關於C++

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拓展庫,參考下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved