这几天在做一个小项目,其中用到了一些基本的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"
/*simple sleep*/ static int sleep_c (lua_State *L){ long secs = lua_tointeger(L, -1); /*获取参数*/ sleep(secs); return 0; /*返回0个值,所以为0*/ }
static const struct luaL_Reg libs[] = { {"sleep", sleep_c}, {NULL, NULL} /*the end*/ };
int luaopen_orangleliu (lua_State *L){ /*注册lib, 上面luaopen_名称 跟下面注册的名称要一致, 还要和编译的.so文件名一致*/ luaL_register(L, "orangleliu", libs); return 1; }
编译
$ gcc -fPIC -shared -llua sleep.c -o orangleliu.so -I/usr/include/lua5.1 -std=gnu99
test.lua require "orangleliu" print(os.time()) orangleliu.sleep(1) print(os.time())
调用结果
$ lua test.lua 1427118862 1427118863
小结
基本的模板就是这样的,复杂一些就是多个参数和多个返回值。 如果有C基础,写起来还是挺快的,不过要是跨平台处理起来也挺麻烦的。 大家可以在github上搜下别人写的lua拓展库,参考下。
本文向大家介绍laravel框架语言包拓展实现方法分析,包括了laravel框架语言包拓展实现方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了laravel框架语言包拓展实现方法。分享给大家供大家参考,具体如下: laravel 使用make:auth生成用户认证,登录表单是英文版本的,打开模板文件(resources/views/auth/login.blade.php),此模板
用C语言完全模拟C++虚函数表的实现与运作方式 如果对前面两大节的描述仔细了解了的话,想用C语言来模拟C++的虚函数以及多态,想必是轻而易举的事情了! 前提 但是,话得说在前面,C++的编译器在生成类及对象的时候,帮助我们完成了很多事件,比如生成虚函数表! 但是,C语言编译器却没有,因此,很多事件我们必须手动来完成,包括但不限于: 手动构造父子关系 手动创建虚函数表 手动设置__vfptr并指向虚
本文向大家介绍C语言实现时区转换函数的实例,包括了C语言实现时区转换函数的实例的使用技巧和注意事项,需要的朋友参考一下 C语言实现时区转换函数的实例 时区转换函数 功能: 把时区1的时间转换成时区2的时间 参数: arg1 -- 输入时间 arg2 -- 时区1(也是arg1当前时间所在的时区) arg3 -- 时区2(要转换的时区的时间) 要求: 参数arg1类型可为timestamp 24个
本文向大家介绍C语言模拟实现atoi函数的实例详解,包括了C语言模拟实现atoi函数的实例详解的使用技巧和注意事项,需要的朋友参考一下 C语言模拟实现atoi函数的实例详解 atoi函数,主要功能是将一个字符串转变为整数,例如将“12345”–>12345。但在实现过程中,我们难免会因为考虑不够全面而漏掉比较重要的几点,今天就总结一下实现atoi函数需要注意的地方。 1.指针为NULL 2.字符串
我试图在C中实现正弦函数,但我得到了奇怪的结果。下面是我用来计算正弦的三个函数:
本文向大家介绍C语言实现数字游戏,包括了C语言实现数字游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言数字游戏的具体代码,供大家参考,具体内容如下 问题描述 : 现在,有许多给小孩子玩的数字游戏,这些游戏玩起来简单,但要创造一个就不是那么容易的了。 在这,我们将介绍一种有趣的游戏。 你将会得到N个正整数,你可以将一个整数接在另一个整数之后以制造一个更大的整数。 例如,这有4