这几天在做一个小项目,其中用到了一些基本的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

lua 调用

test.lua

require "orangleliu"

print(os.time())

orangleliu.sleep(1)

print(os.time())

调用结果

$ lua test.lua

1427118862

1427118863

小结

基本的模板就是这样的,复杂一些就是多个参数和多个返回值。 如果有C基础,写起来还是挺快的,不过要是跨平台处理起来也挺麻烦的。 大家可以在github上搜下别人写的lua拓展库,参考下。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

lua延时函数c语言,C语言拓展实现Lua sleep函数相关推荐

  1. 51c语言延时作用,51单片机C语言延时函数怎么定义和使用

    描述 51单片机C语言延时函数怎么定义 C语言定义延时函数主要通过无意义指令的执行来达到延时的目的.C程序中可使用不同类型的变量来进行延时设计.经实验测试,使用unsigned char类型具有比un ...

  2. 脚本语言语言脚本语言:Shell , JavaScript、VBScript、Perl、PHP、Python、Ruby、Lua

    今天一直在研究脚本语言语言之类的问题,上午正好有机会和大家共享一下. 脚本语言:Shell , JavaScript.VBScript.Perl.PHP.Python.Ruby.Lua 工作控制语言和 ...

  3. lua游戏代码_在游戏中如何使用LUA脚本语言

    当你希望在你的游戏开始的时候读取一些信息,以配置你的游戏,这些信息通常都是放到一个文本文件中,在你的游戏启动的时候,你需要打开这个文件,然后解析字符串,找到所需要的信息. 或许你认为这样就足够了,为什 ...

  4. lua运行外部程序_在C语言程序中嵌入Lua脚本

    第一次知道Lua语言,是上个月在书城的时候,看到一本名为<魔兽世界编程宝典>的书.心想,魔兽世界还能编程?难道是自己编一个魔兽世界出来?翻开一看,原来是编写插件,用的是一种叫Lua的脚本语 ...

  5. gotoprint函数在c语言,C语言之goto浅析

    1.  读代码时遇了的疑惑点: static int do_bind(const char *host, int port, int protocol, int *family) { int fd; ...

  6. 语言基础快速预览-Lua

    语言基础快速预览-Lua 数据类型 变量 循环 流程控制 函数 运算符 字符串 数组 迭代器 table Lua模块与包 Lua元表 协同程序 文件I/O 错误处理 面向对象 初阶话题 进阶话题 高阶 ...

  7. c语言 字符串 strncpy,详解c语言中的 strcpy和strncpy字符串函数使用

    详解c语言中的 strcpy和strncpy字符串函数使用 strcpy 和strcnpy函数--字符串复制函数. 1.strcpy函数 函数原型:char *strcpy(char *dst,cha ...

  8. C进阶_C语言_函数与指针_C语言指针进阶

    上一篇博客http://t.csdn.cn/GYCiM 我们了解了指针相关知识,今天来了解函数和指针的关系. 目录 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 qsort 冒泡排序模拟实 ...

  9. Java语言与lua的区别_5分钟带你快速了解Lua语言

    一般工作多年的程序员都是了解多种计算机语言的,比如java,c,php等,我列出的是常见的,当然也有的知道python,c#,Objective-C,每个语言都有着自己的特点和亮点,没有说哪种语言最好 ...

  10. java跨函数跳转_C语言中将绝对地址转换为函数指针以及跳转到内存指定位置处执行的技巧...

    1.方法一 要对绝对地址0x100000赋值,我们可以用 (unsigned int  * ) 0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做? ...

最新文章

  1. 深度学(deep learning)基础-神经网络简易教程
  2. 快速入门系列之 Scala 语言 GitChat连接
  3. 数据库查询语句(高端)
  4. 指定tomcat运行时的JDK版本
  5. Team Foundation Server XXX 不存在,或者此时不可访问:解决方案
  6. PostgreSQL学习手册(十一) 数据库管理
  7. java Random类和Math.Rondom
  8. 关于Delphi7中日期函数StrtoDate的正确用法 win7报错
  9. Ubuntu安装USB无线网卡驱动
  10. 构造函数this指向
  11. C#wmp.dll自动注册失败
  12. 计蒜课:Fantastic Graph(图论)(有源汇的上下界的可行流)
  13. 多多自走棋的各个套路简单分析
  14. 2019西安交通大学计算机夏令营
  15. 世界经济论坛区块链报告阅读笔记
  16. 寻宝机器人电路板焊接_寻宝活动——组装机器人
  17. GF( p^n) 伽罗瓦域
  18. 美国队长的工资 python代码-用Python绘制美国队长盾牌
  19. Opencv鼠标响应(框选以及取点)
  20. C# 依赖注入 MEF

热门文章

  1. 成形仿真技术简化大型锻件制造工艺
  2. 文本框输入位数 html,[求助]请问如何在文本框中限制输入数字的位数(已解决)...
  3. C#整数相除算百分数
  4. cmd运行Java文件,编译无法识别中文
  5. 《可爱的Python》读书笔记(八)
  6. 最全VIM in PyCharm 的.ideavimrc文件的键盘设置
  7. 解决Github Clone太慢的问题
  8. 搜狐某频道sql多处注入,还有phpinfo()
  9. js中数组删除对象的几种方式总结
  10. 携程旅游系统app开发功能后台分享