- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一整天都在研究 LuaJIT 的一个神秘的不当行为。 libc
stat
函数在其 stat
中返回错误值缓冲区。
LuaJIT 脚本:
-- definitions for sys/types.h
typedef uint32_t mode_t;
typedef uint64_t dev_t;
typedef uint64_t ino_t;
typedef unsigned int nlink_t;
typedef int pid_t;
typedef unsigned int id_t;
typedef unsigned int uid_t;
typedef unsigned int gid_t;
typedef int64_t off_t;
typedef long blksize_t;
typedef int64_t blkcnt_t;
typedef uint64_t fsblkcnt_t;
typedef uint64_t fsfilcnt_t;
-- for sys/stat.h
struct stat {
dev_t st_dev; /* Device */
ino_t st_ino; /* File serial number. */
nlink_t st_nlink; /* Link count. */
mode_t st_mode; /* File mode. */
uid_t st_uid; /* User ID of the file's owner. */
gid_t st_gid; /* Group ID of the file's group.*/
int __pad0;
dev_t st_rdev; /* Device number, if device. */
off_t st_size; /* Size of file, in bytes. */
blksize_t st_blksize; /* Optimal block size for I/O. */
blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */
/* __USE_XOPEN2K8 */
struct timespec st_atim; /* Time of last access. */
struct timespec st_mtim; /* Time of last modification. */
struct timespec st_ctim; /* Time of last status change. */
long __unused[3];
};
/* luajit calls this */
int __xstat(int ver, const char *path, struct stat *buf);
-- lua stat function part
stat = function(path, buf) return ffi.C.__xstat(_STAT_VER, path, buf) end;
以上内容取 self 的系统 C 头文件。现在 LuaJIT 调用是:
local buf = ffi.new("struct stat[1]")
local res = stat('main.c', buf)
ffi.cdef [[
int printf(const char *fmt, ...);
]]
ffi.C.printf("size: %lu, ino: %lu, mode: %d\n", buf[0].st_size, buf[0].st_ino, buf[0].st_mode);
struct stat[1]
在ffi.new
luajit 邮件列表友情建议。
更新
这个想法是调用 linux __xtat。已添加声明。
__xstat
方法取自 https://github.com/Wiladams/LJIT2libc 。否则 C
中的定义太多了给我的标题。
输出正常,直到 st_mode
field 。场为零。我用 C
做了测试语言,一切都很顺利。所以问题出在 LuaJIT stat
给我错误的结果。请告知该怎么做。一整天都在那个东西上。
最佳答案
我在 ffi.cdef
中犯了一些拼写错误类型声明。在luajit
用户的帮助下,问题现已解决。邮件列表。要快速制作简历:
clang -E <some_c_file>.c
在 C
上调用的命令源文件,包含 #include <sys/stat.h>
.struct stat
定义。stat
函数有太多级别的宏垃圾。最后,stat
函数调用__xstat
。对我来说唯一明智的方式是调用 stat
功能是制作一个syscall
.Lua
print
函数不知道cdata
类型。和printf
不知道Lua
类型。但是luajit
关于如何来回转换常见数据类型有一个很好且简单的解释。关于c - libc stat 函数和 LuaJIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60175500/
在 official guide 之后的一段时间里,我一直在尝试在 Windows 10 上安装 LuaJIT。 ,我实际上开始安装它。例如,如果我执行 luajit我进入提示。另外,luajit -
require "utils.lua" stdin:1: module 'utils.lua' not found: no field package.preload['utils.l
我正在尝试使用 setfenv 对一些函数进行沙盒处理,我收到以下输出: 123 nil 为什么调用sandboxTest()时testValue是nil,而在callSandboxedTest()中
只是来自“Lua 新手”的一个小问题......我一直在使用 LuaJIT,它很棒,没有问题是因为 LuaJIT 是 Lua 5.1 兼容的,这是否意味着我可以使用标准 Lua 在 LuaJIT 中使
教程部分中的示例:“为 C 类型定义元方法” 如下所示: local ffi = require("ffi") ffi.cdef[[ typedef struct { double x, y; } p
我想用 C 编写一些函数以在 Lua 中使用,我认为我能找到的最简单的方法是使用 LuaJIT 的 FFI。 我有一个 C 文件“add.c”: int add(int a, int b){ retu
我正在寻找有关如何为 LuaJIT 2 优化 Lua 代码的好指南.它应该关注 LJ2 的细节,比如如何检测哪些跟踪正在被编译,哪些不是,等等。 任何指针?收集到 Lua ML 帖子的链接可以作为答案
我正在尝试优化我的 LuaJIT 代码,我想知道是否有一个调试工具,或者我是否可以编写一个,来检查我的脚本访问全局变量/表/函数的次数? 最佳答案 您可以使用代理表来存储全局变量,并将对全局表的任何访
我有以下 qsort 示例来尝试 luajit 中的回调。但是它有内存泄漏(luajit:执行时内存不足),这对我来说并不明显。 有人可以给我一些关于如何创建正确的回调示例的提示吗? local ff
我在使用 ffi.metatype 定义的用户数据时遇到问题。当对象被垃圾收集时,我会遇到段错误。这是代码。 ffi = require("ffi") srate = 48000 ffi.cdef[[
关于 的 Luajit 手册-b 选项 说: The output file type is auto-detected from the extension of the output file n
我有一个小的 C 程序,它有一个字符串,它必须代表一个 Lua 模块,它看起来像这样: const char *lua_str = " local mymodule = {} \ functi
已关注 MSDN's GetOpenFileName example使用 LuaJIT 的 FFI。这两天我一直在努力让它工作,不仅对话框打不开,而且整个东西都崩溃了。 当使用 OllyDdb 进行调
我有这样的文件设置: main.lua (requires 'mydir.b' and then 'b') b.lua mydir/ b.so (LuaJIT C module) 从主要,
我认为 LuaJIT 很棒,现在我也看到了 eLua。 我很好奇嵌入式程序员什么时候会为嵌入式系统选择一个而不是另一个? 最佳答案 这取决于您所说的“嵌入式系统”是什么意思。您是指“移动应用程序”还是
lua -e "print(package.path)" ./?.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;/usr/lib
编辑:不幸的是,LuaJIT 被排除在下面链接的比较之外。 这个comparison编程语言的多样性表明 LuaJIT 比普通 Lua 实现有十倍以上的改进。为什么变化这么大? Lua 是否有什么特殊
我目前正在尝试使用以下命令在我的 Arch linux 发行版上使用 luajit 支持编译 suricata ( http://suricata-ids.org/ ): ./configure --
LuaJIT 知道它定义的 C 类型以及数组的长度,但它不检查边界: ffi = require("ffi") ten_ints = ffi.typeof("int [10]") p1 = ten_i
我在 LuaJit 中不断收到内存不足错误。如何增加堆栈或堆大小? 谢谢 最佳答案 除了玩具示例,我自己没有使用过 LuaJIT。但是由于还没有其他人提供任何答案... 从浏览 documentati
我是一名优秀的程序员,十分优秀!