`
tcspecial
  • 浏览: 913804 次
  • 性别: 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扩展支持库

    这个压缩包“lua扩展支持库静态版luashellfne”可能包含了用于扩展Lua功能的静态库文件,方便开发者将其集成到自己的项目中,而无需关心动态链接库的依赖问题。 在Lua扩展中,我们可以讨论以下几个关键知识点: 1....

    C#-lua接口

    本文将深入探讨“C#-lua接口”的相关知识点,包括接口的实现原理、使用方法以及优势。 首先,C#是Microsoft .NET框架下的主要编程语言,它具有类型安全、面向对象和跨平台的特性。而Lua则是一种轻量级的脚本语言,...

    C\C++中调用Lua函数的接口封装

    在C或C++中调用Lua函数通常...综上所述,"C/C++中调用Lua函数的接口封装"旨在提供一个便捷的桥梁,使C/C++开发者能够更高效、安全地利用Lua的脚本能力。通过良好的封装设计,可以极大地提高开发效率和代码的可维护性。

    易语言lua的例子

    在易语言中集成Lua,可以利用Lua的灵活性和高效性来扩展易语言的功能。 这个压缩包文件包含了一些用于在易语言中调用Lua的资源和示例程序,让我们一一解析: 1. **Lua.lib**:这是一个易语言的库文件,它提供了与...

    lua扩展库V1.51

    《lua扩展库V1.51》是针对lua编程语言的一个功能丰富的库集合,它为lua程序员提供了更多元化的操作工具,特别是在硬件控制和数据处理方面。以下将详细阐述其中的一些核心库及其功能: 1. **bit库**: - `bit`库是...

    lua扩展库V1.6

    lua扩展库V1.6,作为一款集成了多种功能模块的库,极大地丰富了Lua语言的应用场景和功能。在接下来的内容中,我将详细介绍标题和描述中提到的各项知识点。 ### 标题知识点解析 #### Lua扩展库V1.6 Lua扩展库V1.6...

    Lua面向对象封装 链接库

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

    iis支持lua的isapi扩展(lua for iis)

    4. **扩展性**:结合IIS的ISAPI接口,可以轻松扩展服务器功能。 然而,也有需要注意的方面: 1. **安全性**:使用脚本语言可能会增加安全风险,需要确保Lua代码的安全性,防止恶意攻击。 2. **调试与监控**:相比C/...

    lua-cURL访问http/https

    总的来说,Lua-cURL是一个强大且灵活的工具,它扩展了Lua在Web开发中的能力,使得编写网络相关的脚本变得简单高效。无论你是处理简单的HTTP请求还是构建复杂的网络应用,Lua-cURL都是一个值得信赖的库。

    2 OpenResty+Lua+Redis 高性能后端接口.docx

    OpenResty+Lua+Redis 高性能后端接口 OpenResty 是基于 Nginx 的高性能 web 服务器,它使用 Lua 语言作为脚本语言来实现动态内容生成和处理。 Lua 是一种轻量级的脚本语言,广泛应用于游戏、嵌入式系统和 web 开发...

    Luanet(0.01) Lua与.net接口函数库

    Luanet是基于Lua的C++扩展实现的,它通过tolua++工具生成.NET与Lua的绑定代码。在运行时,Luanet通过托管代码(Managed Code)与非托管代码(Unmanaged Code)的交互,利用.NET的互操作性(Interop)特性,实现在Lua...

    lua_stm32f4.rar_lua stm32_lua移植stm32_stm32 lua_stm32f407移植lua_st

    5. **实现通信接口**:为了让Lua能够控制硬件资源,如GPIO、定时器和串口,需要编写C语言的扩展模块,提供与硬件交互的接口。这些接口可以作为Lua的全局函数,供Lua脚本调用。 6. **调试与测试**:通过串口或其他...

    lua开发pdf的接口

    在实际开发中,你可能需要根据需求来组织和扩展这个接口,例如封装成易于使用的类,或者提供更高级别的抽象方法,使得生成 PDF 文件的过程更加简洁和直观。同时,要注意处理错误和异常,确保生成过程的健壮性。 ...

    LUA脚本|LUA脚本支持库

    LUA脚本支持库则是为了扩展LUA的功能,提供更多的API和工具,使得开发者能够更高效、更方便地编写LUA代码。本文将深入探讨LUA脚本支持库的相关知识点。 1. LUA基础 LUA的核心特点是简洁和高效,它拥有简单的语法...

    LuaOO 0.1.1.0更新版

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

    lua for vb.net

    总的来说,【lua for vb.net】为VB.NET开发者提供了一个强大且易于使用的Lua接口,使得他们能够利用Lua的灵活性和效率,提升应用程序的功能和用户体验。通过深入理解和熟练运用这个库,开发者可以构建出更加动态和可...

    OpenWrt UCI详解(C和Lua语言使用uci接口实例).docx

    OpenWrt UCI详解 1. uci 简介 ...通过C语言和Lua的接口,用户可以根据需要动态地读取和更新配置,确保OpenWrt设备的灵活性和可扩展性。理解并熟练掌握UCI的使用对于开发和维护OpenWrt系统至关重要。

    lua_test.rar_C++_c# lua_c++ lua_lua_lua调用C++

    在Lua中,调用C++函数通常需要通过全局环境中的一个表(table)来完成,这个表是C++导出给Lua的接口。例如,你可能会看到类似以下的Lua代码: ```lua local cplusplus = require("cpp_module") -- 加载C++模块 ...

    Lua程序设计和lua-5.1中文手册

    在实际编程中,你可能还会用到Lua的C接口,通过这个接口,可以将C/C++代码与Lua脚本进行交互,实现性能敏感部分的优化或者扩展Lua的功能。LuaJIT是一个流行的Just-In-Time编译器,它可以显著提升Lua代码的执行速度。...

Global site tag (gtag.js) - Google Analytics