C語言拓展實現Lua sleep函式

2022-09-26 18:18:13 字數 1302 閱讀 4004

這幾天在做乙個小專案,其中用到了一些www.cppcns.com基本的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"

/******* sleep*/

static int sleep_c (lua_state *l)

static const struct lual_reg libs = ,

/*the end*/

};int luaopen_orangleliu (lua_state *l)

編譯複製** **如下:

$ 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拓展庫,參www.cppcns.com考下。

本文標題: c語言拓展實現lua sleep函式

本文位址:

C語言拓展筆記

一維陣列 陣列 陣列是一組有序資料的集合,陣列中每乙個元素的型別相同,用陣列名和下標來唯一確定陣列中的元素。一維陣列的定義 型別說明符 陣列名 下標常量表示式 二維陣列 二維陣列的定義 型別說明符 陣列名 常量表示式 常量表示式 函式 1 無參函式 定義格式 資料型別 函式名 現代風格是 函式名 v...

C語言巨集定義拓展

巨集定義的淺顯理解。引數巨集編譯可以完成一些簡單的邏輯控制,其具體形式如下 define text a if a printf yes else printf no void main void 其中反斜槓在c中表示換行符,其後不可新增任何字元,空格也不允許。這樣的巨集定義有點像乙個小函式,其中te...

C 學習筆記 C 對C語言的函式拓展

內聯函式是指用inline關鍵字修飾的函式。在類內定義的函式被預設成內聯函式。內聯函式從源 層看,有函式的結構,而在編譯後,卻不具備函式的性質 inline關鍵字只是給編譯器乙個建議,編譯器不一定會接受這種建議。一些編譯器,會將簡單的函式做內聯編譯,即使它沒有用inline關鍵字宣告 c 編譯器直接...