使用 LuaJIT 导入 stat.h
Import stat.h using LuaJIT
我正在编写一个 Lua 应用程序,我正在尝试使用 FFI library 访问 stat.h
头文件中 S_IWUSR
常量的值=21=]JIT.
如何在我的 Lua 代码中包含 stat.h
以便我可以访问常量?
谢谢
使用 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 包系统管理加载它们一次。
我正在编写一个 Lua 应用程序,我正在尝试使用 FFI library 访问 stat.h
头文件中 S_IWUSR
常量的值=21=]JIT.
如何在我的 Lua 代码中包含 stat.h
以便我可以访问常量?
谢谢
使用 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 包系统管理加载它们一次。