`
tcspecial
  • 浏览: 897543 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

扩展Lua接口

    博客分类:
  • OS
阅读更多

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

 

 

 

 

分享到:
评论

相关推荐

    Lua面向对象封装 链接库

    LuaOO是在lua原有的API基础之上扩展而来,极少地修改lua源码,主要是通过扩展lua原来的代码。扩展lua与C++环境交互。因此当有新版本的lua源码发布时也能够支持。LuaOO的很多接口的命名与lua API类似。LuaOO隐藏了lua...

    LuaOO 0.1.1.0更新版

    LuaOO是在lua原有的API基础之上扩展而来,极少地修改lua源码,主要是通过扩展lua原来的代码。扩展lua与C++环境交互。因此当有新版本的lua源码发布时也能够支持。LuaOO的很多接口的命名与lua API类似。LuaOO隐藏了lua...

    Lua编译器OpenLua.zip

    OpenLua 这个名字代表两个意思: 一是指为支持静态元编程而对标准 Lua(5.02) 进行扩展得到的语言; 二是指一款针对上述语言的、并且开放了若干内部可编程接口的编译器。 Getting Started 首先克隆这个仓库 git ...

    cocos2dx的lua扩展

    这个扩展是一个轻量级的 MVC 框架,是为了开发移动游戏,结合使用 cocos2d-x 框架而开发一个轻量级的框架。 什么是 MVCS? - M 就是 Model 层,存储数据的地方,只提供2种接口,gets 和 sets 接口。 - V 就是 View ...

    Programming_In_Lua.doc(word版本,带完整文档结构图)

    但是与其他语言不同的是,不仅用Lua编写的软件易于扩展,而且用其他语言比如C/C++编写的软件也很容易使用Lua扩展其功能。 一开始,Lua就被设计成很容易和传统的C/C++整合的语言。这种语言的二元性带来了极大的好处。...

    泰康串口大师(提供LUA插件扩展接口)

    泰康串口大师在启动后能够自动检测并列出所有存在的COM接口,能够记录数 据到达时间(毫秒ms级),支持以16进制和字符两种方式接收、发送、保存数据并且 具有循环发送数据的功能。另外,支持ASCII码与字符之间自动...

    Lua 入门教程

    可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。 其它特性: 支持面向过程(procedure-oriented)编程和函数式编程(functional...

    用Lua 5.2扩展C ++应用程序

    使用可用的Lua 5.2 C接口的子集来使用Lua扩展C ++应用程序。

    Lua开发包 for Script.NET V2.1.1

    9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面扩展包,...

    Lua编译和调试工具最新版(支持lua5.4)

    FLua是一款非常好用且功能强大的LUA编译和调试工具,软件最大的特色就是可以注到宿主程序内对lua脚本进行编译调式,软件提供了丰富的编程接口,有了它就可以使用简单的代码来解决关键的问题了,而且这款软件的扩展性...

    Lua开发包

    9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面...

    Programming in Lua(第四版高清带书签)

    适用于所有可以受益于简单、可扩展、可移植和高效脚本语言的领域 比如嵌入式系统、移动设备、物联网,当然还有游戏。 从一开始,我们就把Lua设计成与用C/ c++和其他con-编写的软件集成在一起 传统的语言。这种...

    LuaStudio v9.8.6.zip

    LuaStudio是一款快速的、轻量级的、可扩展的lua脚本编辑器软件。软件最大特点就是可以注入到宿主程序内对lua脚本进行调试,还可以设置断点观察变量的值,此外,软件还具有编辑、工程管理、调试、远程调试、等各种...

    lua客户端网络库,主要供手机游戏客户端使用.rar

    Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua 可以应用在游戏开发、独立应用脚本、Web 应用脚本、扩展和...

    Lua解析器mLua.zip

    main()扩展mLua默认只能从文件系统中加载lua代码,但是如果对MLua的setBasedir方法进行重写,以其他的方式实现SourceLoader,则可以加载任意方式的lua代码,包括assets中的,和加密的。 标签:mLua

    C语言与Lua之间的相互调用详解

    在C中嵌入lua脚本既可以让用户在不重新编译代码的情况下修改lua代码更新程序,也可以给用户提供一个自由定制的接口,这种方法遵循了机制与策略分离的原则。在lua中调用C函数可以提高程序的运行效率。lua与C的相互...

    colib:一个lua扩展库

    这是一个Lua扩展库,提供了一些常用的扩展功能,特别适用于游戏服务器的场景。 该库还在不断完善中。。。 功能列表 已提供的模块有: rtl模块: 提供基础的面向对象实现。 dbg模块: 扩展的traceback函数,可以打印...

    LuaCL:Lua-OpenCL 接口

    OpenCL Runtime(用户需安装)用户和开发者都需要配置好相应的...只要开发的程序中不使用供应商提供的扩展功能,任何SDK连接编译的程序都可以在全部支持OpenCL的平台上正常工作。Apple:Mac OS X v10.7之后在XCode中

    Lua调用自定义C模块

    Lua可以调用C函数的能力将极大的提高Lua的可扩展性和可用性。对于有些和操作系统相关的功能,或者是对效率要求较高的模块,我们完全可以通过C函数来实现,之后再通过Lua调用指定的C函数。对于那些可被Lua调用的C函数...

    lunix:Lua Unix模块

    关于 lunix是通用Unix系统API的Lua绑定库模块。 该模块已在AIX,...POSIX扩展 与luaposix不同,该库不会将自身限制为POSIX,并且在可能的情况下会模拟一个接口,而该接口在受支持的平台上本机不可用。 例如,该库

Global site tag (gtag.js) - Google Analytics