参考: https://blog.csdn.net/weiwangchao_/article/details/16880401

    http://luajit.org/ext_c_api.html

https://www.cnblogs.com/darkknightzh/p/5812763.html

lua 调用 C,需要用到 lua 的 ffi 库,它允许从纯Lua代码调用外部C函数,使用C数据结构,但是C的数据类型并不一定都能转化成lua的数据类型。

#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <stdio.h>
#include <dirent.h>
struct rlimit rlmt;
char* get_size()
{
  if (getrlimit(RLIMIT_CORE, &rlmt) == -1) {
  return -1;
  }
  return (char*)rlmt.rlim_cur;
};
char* set_size(double CORE_SIZE)
{
  rlmt.rlim_cur = (rlim_t)CORE_SIZE;
  rlmt.rlim_max = (rlim_t)CORE_SIZE;
  if (setrlimit(RLIMIT_CORE, &rlmt) == -1) {
  return -1;
  }
  return (char*)rlmt.rlim_cur;
}; int cd_chdir(const char *dirname)
{
  int a=chdir(dirname);
  return a;
};

【g++ 编译一下,变成 *.so 文件 】

下面为 Makefile  文件, 在目录下 make  能直接生成 *.so  文件 ,修改里面的  *.so   *.o  文件

## Linux/BSD
LDFLAGS += -shared
CFLAGS ?= -g -O -Wall
override CFLAGS += -fpic
#CC = gcc
RM = rm -f
COPY = cp
all: my_corefile.so
my_corefile.o: my_corefile.c
my_corefile.so: my_corefile.o
$(CC) $(LDFLAGS) $^ -o $@
clean:
$(RM) *.so *.o

lua  文件

local ffi = require 'ffi'
--local ffi_string = ffi.string
--local ffi_new = ffi.new
--local C = ffi.C ffi.cdef[[
  int get_size();
  int set_size(long CORE_SIZE);
  int cd_chdir(const char *dirname);
]]
set_get_core = ffi.load('/home/chentao/c_test/c_lua/qq/mycorefile/my_corefile.so')--直接导入绝对路径
local a = set_get_core.get_size()
print(a) local b = set_get_core.set_size(524280)
print(b)
print("hass set")
local a = set_get_core.get_size()
print(a)
print(os.getenv("PWD"))
print(" cd ",set_get_core.cd_chdir("/home"))

导入路径为 绝对路径

lua使用ffi调用c程序的函数的更多相关文章

  1. (原)lua使用ffi调用c程序的函数

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5812763.html 参考网址: http://luajit.freelists.narkive.co ...

  2. C程序与Lua脚本相互调用

    Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...

  3. [转载]C#控制台应用程序里调用自己写的函数的方法

    (2011-08-15 15:52:13) 转载▼ 标签: 转载 分类: 技术类 原文地址:C#控制台应用程序里调用自己写的函数的方法作者:萧儿 最近写程序,遇到了一个很白痴的问题,记录下来,免得下次 ...

  4. Lua 中的string库(字符串函数库)总结

    (字符串函数库)总结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-11-20我要评论 这篇文章主要介绍了Lua中的string库(字符串函数库)总结,本文讲解了string库 ...

  5. Lua语法基础(2)--基本语法、函数

    上一篇编辑编辑着,发现,缩进出了问题.作为一个不是强迫症的人,实在是忍受不了同一级内容不同缩进方式的槽点,于是重开一篇吧.(万幸,这样的文章也只有我自己看.) 第四 基本语法 赋值语句,Lua可以对多 ...

  6. Lua中的常用语句结构以及函数

     1.Lua中的常用语句结构介绍 --if 语句结构,如下实例: gTable = {} ] ] then ]) == gTable[] then ]) else print("unkown ...

  7. lua 15 协程-协同程序

    转自:http://www.runoob.com/lua/lua-coroutine.html 什么是协同(coroutine)? Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈 ...

  8. C#中可直接调用WIN32的API函数--USER32.DLL

    Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...

  9. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

随机推荐

  1. C++——二维vector初始化大小方法

    初始化二维vector,为r*c的vector,所有值为0.1.直接用初始化方法(刚开始没想到) vector<vector<int> > newOne(r, vector&l ...

  2. 爬虫之获取UA模块

    from fake_useragent import UserAgent ua = UserAgent(verify_ssl=False)res = ua.randomprint(res) 注: 实列 ...

  3. [LeetCode] 923. 3Sum With Multiplicity 三数之和的多种情况

    Given an integer array A, and an integer target, return the number of tuples i, j, k  such that i &l ...

  4. 解决Windows更新错误0x80240034

    Windows update错误0x80240034 笔者平台:WIn10预览版 微软官方文档: https://support.microsoft.com/en-us/help/929833/use ...

  5. 关于阻止百度滥用cookies的想法

    Chrome浏览器支持禁止指定的cookies,因此可以作为阻止百度滥用cookies的突破口,最好的方案应该是制作chrome插件(国内厂商的浏览器基本都是基于谷歌开源的 Chromium计划,基本 ...

  6. 【转】Python入门:Anaconda和Pycharm的安装和配置

    子曰:“工欲善其事,必先利其器.”学习Python就需要有编译Python程序的软件,一般情况下,我们选择在Python官网下载对应版本的Python然后用记事本编写,再在终端进行编译运行即可,但是对 ...

  7. 问题追查:QA压测工具http长连接总是被服务端close情况

    1. 背景 最近QA对线上单模块进行压测(非全链路压测),http客户端 与 thrift服务端的tcp链接总在一段时间被close. 查看服务端日志显示 i/o timeout. 最后的结果是: q ...

  8. 网络基础-------------给电脑设置IP

    ip 是每一台电脑进入互联网的一个必备钥匙,没有它就不能体会冲浪的乐趣,当我们使用电脑连接无线时我们就会被自动分配一个ip地址(DHCP),这样我们就可以凭借这个IPV4地址来进行冲浪了,但是自动分配 ...

  9. xunsearch强制刷新

    $index = $xs->index; $index->flushLogging(); 等价于 util/Indexer.php --flush-log demo

  10. 固定定位导致$(window).scrollTop();获取滚动后到顶部距离总是为0

    如下移动端索引列表页面(点击某元素后弹出的页面)    我想用 $(window).scrollTop(); 获取页面滚动后距离顶部的距离,但获取到的值总是0 期间查了很久,但都无疾而终,后来看到一篇 ...