欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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,獲取當前目錄等等,lua標準庫中沒有提供這些接口,雖然所第三方庫中也都有實現(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)。

復制代碼 代碼如下:

*sleep.c 文件 *
/*學習寫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;
}

編譯

復制代碼 代碼如下:

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

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

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

調(diào)用結果

復制代碼 代碼如下:

$ lua test.lua
1427118862
1427118863

小結

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

相關文章

  • 《C++ Primer》隱式類類型轉換學習整理

    《C++ Primer》隱式類類型轉換學習整理

    在本篇文章里小編給大家整理的是關于《C++ Primer》隱式類類型轉換學習筆記內(nèi)容,需要的朋友們參考下。
    2020-02-02
  • 華為機試題之統(tǒng)計單詞個數(shù)實例代碼

    華為機試題之統(tǒng)計單詞個數(shù)實例代碼

    這篇文章主要介紹了華為機試題之統(tǒng)計單詞個數(shù)實例代碼的相關資料,需要的朋友可以參考下
    2017-05-05
  • NDK 數(shù)據(jù)結構之隊列與棧等的實現(xiàn)

    NDK 數(shù)據(jù)結構之隊列與棧等的實現(xiàn)

    這篇文章主要介紹了NDK 數(shù)據(jù)結構之隊列與棧等的實現(xiàn)的相關資料,希望通過本文大家能理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C++運算符重載實例代碼詳解(調(diào)試環(huán)境 Visual Studio 2019)

    C++運算符重載實例代碼詳解(調(diào)試環(huán)境 Visual Studio 2019)

    這篇文章主要介紹了C++運算符重載實例(調(diào)試環(huán)境 Visual Studio 2019),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C語言超細致講解分支語句

    C語言超細致講解分支語句

    分支結構的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴格按照語句出現(xiàn)的物理順序。分支結構的程序設計方法的關鍵在于構造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當?shù)姆种дZ句
    2022-05-05
  • C語言編程數(shù)據(jù)結構基礎詳解小白篇

    C語言編程數(shù)據(jù)結構基礎詳解小白篇

    這篇文章主要介紹了數(shù)據(jù)結構的基礎,非常適合初學數(shù)據(jù)結構的小白,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進步,早日升職加薪
    2021-09-09
  • Java?C++?leetcode面試零矩陣

    Java?C++?leetcode面試零矩陣

    這篇文章主要為大家介紹了Java?C++題解leetcode面試零矩陣示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • C語言實現(xiàn)簡單翻譯功能

    C語言實現(xiàn)簡單翻譯功能

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單翻譯功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 基于C++實現(xiàn)五子棋小游戲

    基于C++實現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細介紹了基于C++實現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++訪問std::variant類型數(shù)據(jù)的幾種方式小結

    C++訪問std::variant類型數(shù)據(jù)的幾種方式小結

    std::variant是?C++17中引入的一個新的類模板,提供了一種存儲不同類型的值的方式,本文主要介紹了C++訪問std::variant類型數(shù)據(jù)的幾種方式小結,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論