【问题标题】:Import stat.h using LuaJIT使用 LuaJIT 导入 stat.h
【发布时间】:2015-11-03 01:05:42
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: lua ffi luajit


    【解决方案1】:

    使用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 包系统管理加载它们一次。

    【讨论】:

      猜你喜欢
      • 2016-08-10
      • 2011-08-20
      • 2013-03-12
      • 1970-01-01
      • 2014-01-18
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      相关资源
      最近更新 更多