使用LuaJIT导入stat.h

时间:2015-08-10 23:59:18

标签: lua ffi luajit

我正在编写一个Lua应用程序,我正在尝试使用LuaJIT的FFI library访问S_IWUSR头文件中stat.h常量的值。

如何在我的Lua代码中包含stat.h,以便我可以访问常量?

由于

1 个答案:

答案 0 :(得分:1)

使用ffi.cdef,您可以在 FFI C命名空间中加载大多数C代码,但到目前为止还没有预处理器,因此您应该使用枚举作为常量值。

我的sys/stat.h S_IWUSR定义如下:

#define _S_IWRITE 0x0080
...
#define _S_IWUSR    _S_IWRITE
...
#define S_IWUSR     _S_IWUSR

LuaJIT示例:

local ffi = require("ffi")

ffi.cdef([[
    enum{S_IWUSR = 0x0080};
]])

print(ffi.C.S_IWUSR) -- 128

还有static const变量添加类型的方法。

static const int S_IWUSR = 0x0080;

但是你必须要注意不要重新定义!请记住:每个Lua状态只有一个FFI实例,require("ffi")不会创建一个新的。建议将C定义放在一个模块中,让Lua包系统管理它们只需加载一次。