【发布时间】:2015-11-03 01:05:42
【问题描述】:
我正在编写一个 Lua 应用程序,我正在尝试使用 LuaJIT 的 FFI library 访问 stat.h 头文件中的 S_IWUSR 常量的值。
如何在 Lua 代码中包含 stat.h 以便访问常量?
谢谢
【问题讨论】:
我正在编写一个 Lua 应用程序,我正在尝试使用 LuaJIT 的 FFI library 访问 stat.h 头文件中的 S_IWUSR 常量的值。
如何在 Lua 代码中包含 stat.h 以便访问常量?
谢谢
【问题讨论】:
使用ffi.cdef,您可以在FFI C 命名空间 中加载大部分C 代码,但目前还没有预处理器,因此您应该使用枚举作为常量值。
在我的sys/stat.hS_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 包系统管理加载它们一次。
【讨论】: