Lua 是巴西研究小组开发的一个灵活小巧的脚本语言,整个编译后的静态库才400多K,便于嵌入应用程序中,扩展程序功能。常用于游戏开发中,nginx的openresty项目也让lua更加流行。
Lua语法与python比较类似,支持自动垃圾回收,面向对象编程。
一. 扩展lua接口
lua没有提供sleep()和msleep()实现,我们可以提供动态库给lua调用,代码如下:
#include <unistd.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h" // sleep实现 static int sleep_c( lua_State *l ) { long sec = lua_tointeger( l, -1 ); sleep( sec ); return 0; } // msleep实现 static int msleep_c( lua_State *l ) { long sec = lua_tointeger( l, -1 ); usleep( sec*1000 ); return 0; } // 声明模块函数集合 static const struct luaL_Reg libs[] = { { "sleep", sleep_c }, { "msleep", msleep_c }, { NULL, NULL } }; // 注册函数 int luaopen_myutil( lua_State *l ) { luaL_register( l, "myutil", libs ); // 库名称与luaopen_xxx一致 return 1; }
编译:liblua.a 需添加-fPIC选项,否则上述库会编译出错。
gcc -fPIC -shared -o myutil.so sleep.c -I. -I/usr/local/include -L/usr/local/lib -llua
lua调用:
require "myutil" local start = os.time() print( "Start: ", start ) myutil.sleep(2) local mid = os.time() print( "End: "..mid )
动态库路径:将myutil.so库放在下面任意目录,均可正常执行:
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > print(package.cpath) ./?.so;/usr/lib64/lua/5.1/?.so;/usr/lib64/lua/5.1/loadall.so
参考链接:
http://www.troubleshooters.com/codecorn/lua/lua_lua_calls_c.htm#_Make_an_msleep_Function
相关推荐
LuaOO是在lua原有的API基础之上扩展而来,极少地修改lua源码,主要是通过扩展lua原来的代码。扩展lua与C++环境交互。因此当有新版本的lua源码发布时也能够支持。LuaOO的很多接口的命名与lua API类似。LuaOO隐藏了lua...
LuaOO是在lua原有的API基础之上扩展而来,极少地修改lua源码,主要是通过扩展lua原来的代码。扩展lua与C++环境交互。因此当有新版本的lua源码发布时也能够支持。LuaOO的很多接口的命名与lua API类似。LuaOO隐藏了lua...
OpenLua 这个名字代表两个意思: 一是指为支持静态元编程而对标准 Lua(5.02) 进行扩展得到的语言; 二是指一款针对上述语言的、并且开放了若干内部可编程接口的编译器。 Getting Started 首先克隆这个仓库 git ...
这个扩展是一个轻量级的 MVC 框架,是为了开发移动游戏,结合使用 cocos2d-x 框架而开发一个轻量级的框架。 什么是 MVCS? - M 就是 Model 层,存储数据的地方,只提供2种接口,gets 和 sets 接口。 - V 就是 View ...
但是与其他语言不同的是,不仅用Lua编写的软件易于扩展,而且用其他语言比如C/C++编写的软件也很容易使用Lua扩展其功能。 一开始,Lua就被设计成很容易和传统的C/C++整合的语言。这种语言的二元性带来了极大的好处。...
泰康串口大师在启动后能够自动检测并列出所有存在的COM接口,能够记录数 据到达时间(毫秒ms级),支持以16进制和字符两种方式接收、发送、保存数据并且 具有循环发送数据的功能。另外,支持ASCII码与字符之间自动...
可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。 其它特性: 支持面向过程(procedure-oriented)编程和函数式编程(functional...
使用可用的Lua 5.2 C接口的子集来使用Lua扩展C ++应用程序。
9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面扩展包,...
FLua是一款非常好用且功能强大的LUA编译和调试工具,软件最大的特色就是可以注到宿主程序内对lua脚本进行编译调式,软件提供了丰富的编程接口,有了它就可以使用简单的代码来解决关键的问题了,而且这款软件的扩展性...
9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面...
适用于所有可以受益于简单、可扩展、可移植和高效脚本语言的领域 比如嵌入式系统、移动设备、物联网,当然还有游戏。 从一开始,我们就把Lua设计成与用C/ c++和其他con-编写的软件集成在一起 传统的语言。这种...
LuaStudio是一款快速的、轻量级的、可扩展的lua脚本编辑器软件。软件最大特点就是可以注入到宿主程序内对lua脚本进行调试,还可以设置断点观察变量的值,此外,软件还具有编辑、工程管理、调试、远程调试、等各种...
Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua 可以应用在游戏开发、独立应用脚本、Web 应用脚本、扩展和...
main()扩展mLua默认只能从文件系统中加载lua代码,但是如果对MLua的setBasedir方法进行重写,以其他的方式实现SourceLoader,则可以加载任意方式的lua代码,包括assets中的,和加密的。 标签:mLua
在C中嵌入lua脚本既可以让用户在不重新编译代码的情况下修改lua代码更新程序,也可以给用户提供一个自由定制的接口,这种方法遵循了机制与策略分离的原则。在lua中调用C函数可以提高程序的运行效率。lua与C的相互...
这是一个Lua扩展库,提供了一些常用的扩展功能,特别适用于游戏服务器的场景。 该库还在不断完善中。。。 功能列表 已提供的模块有: rtl模块: 提供基础的面向对象实现。 dbg模块: 扩展的traceback函数,可以打印...
OpenCL Runtime(用户需安装)用户和开发者都需要配置好相应的...只要开发的程序中不使用供应商提供的扩展功能,任何SDK连接编译的程序都可以在全部支持OpenCL的平台上正常工作。Apple:Mac OS X v10.7之后在XCode中
Lua可以调用C函数的能力将极大的提高Lua的可扩展性和可用性。对于有些和操作系统相关的功能,或者是对效率要求较高的模块,我们完全可以通过C函数来实现,之后再通过Lua调用指定的C函数。对于那些可被Lua调用的C函数...
关于 lunix是通用Unix系统API的Lua绑定库模块。 该模块已在AIX,...POSIX扩展 与luaposix不同,该库不会将自身限制为POSIX,并且在可能的情况下会模拟一个接口,而该接口在受支持的平台上本机不可用。 例如,该库