使用LuaJIT导入stat.h。

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

我该如何在 Lua 代码中包含 stat.h 文件以便可以访问这个常量?

谢谢

点赞
用户2546626
用户2546626

使用ffi.cdef,您可以加载大多数C代码到FFI 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包系统管理只加载一次。

2015-08-11 00:56:54