C语言拓展实现Lua sleep函数
这几天在做一个小项目,其中用到了一些基本的API,例如sleep,获取当前目录等等,lua标准库中没有提供这些接口,虽然所第三方库中也都有实现,但是要用的就那么几个函数,在一个嵌入式系统中安装那么多第三方库有点浪费资源,于是@胜利哥写了一个socket的C实现,然后给我用。我试着把其他几个函数也用C实现,首先看下怎么用C写lua的拓展。
C部分
首先是根据LuaC语言的协议写好调用模块,编译成.so文件,然后才可以在lua脚本中调用。下面是在Ubuntu14.04**系统中,基于lua5.1**写的一个sleep实现。
*sleep.c文件* /*学习写luac拓展,对于一些简单的函数自己提供C拓展 *ubuntu编译$gcc-fPIC-shared-lluasleep.c-oorangleliu.so-I/usr/include/lua5.1-std=gnu99 */
#include"unistd.h"
/*这个三个是必须的头文件*/ #include"lua.h" #include"lualib.h" #include"lauxlib.h"
/*simplesleep*/ staticintsleep_c(lua_State*L){ longsecs=lua_tointeger(L,-1);/*获取参数*/ sleep(secs); return0; /*返回0个值,所以为0*/ }
staticconststructluaL_Reglibs[]={ {"sleep",sleep_c}, {NULL,NULL} /*theend*/ };
intluaopen_orangleliu(lua_State*L){ /*注册lib,上面luaopen_名称跟下面注册的名称要一致,还要和编译的.so文件名一致*/ luaL_register(L,"orangleliu",libs); return1; }