File 使用luaffi写入文件
我试图使用using将一些文本附加到一个文件中,但我对C不是很了解,所以我遇到了一些麻烦。代码如下:File 使用luaffi写入文件,file,lua,ffi,luajit,File,Lua,Ffi,Luajit,我试图使用using将一些文本附加到一个文件中,但我对C不是很了解,所以我遇到了一些麻烦。代码如下: local ffi = require "ffi" ffi.cdef[[ typedef int __kernel_ssize_t; typedef __kernel_ssize_t ssize_t; ssize_t write(int fildes, const void *buf, size_t nbyte); ]] local f = io.open("/tmp/test", "a+"
local ffi = require "ffi"
ffi.cdef[[
typedef int __kernel_ssize_t;
typedef __kernel_ssize_t ssize_t;
ssize_t write(int fildes, const void *buf, size_t nbyte);
]]
local f = io.open("/tmp/test", "a+") -- Opening file in append mode
local message = "Hello World"
ffi.C.write(f, message, string.len(message))
f:close()
但我得到了以下错误:
luajit: test.lua:12: bad argument #1 to 'write' (cannot convert 'void *' to 'int')
stack traceback:
[C]: in function 'write'
c.lua:12: in main chunk
[C]: at 0x0100001490
我已使用以下代码解决了此问题:
local ffi = require "ffi"
ffi.cdef[[
typedef struct {
char *fpos;
void *base;
unsigned short handle;
short flags;
short unget;
unsigned long alloc;
unsigned short buffincrement;
} FILE;
FILE *fopen(const char *filename, const char *mode);
int fprintf(FILE *stream, const char *format, ...);
int fclose(FILE *stream);
]]
local f = ffi.C.fopen("/tmp/test", "a+")
ffi.C.fprintf(f, "Hello World")
ffi.C.fclose(f)
我已使用以下代码解决了此问题:
local ffi = require "ffi"
ffi.cdef[[
typedef struct {
char *fpos;
void *base;
unsigned short handle;
short flags;
short unget;
unsigned long alloc;
unsigned short buffincrement;
} FILE;
FILE *fopen(const char *filename, const char *mode);
int fprintf(FILE *stream, const char *format, ...);
int fclose(FILE *stream);
]]
local f = ffi.C.fopen("/tmp/test", "a+")
ffi.C.fprintf(f, "Hello World")
ffi.C.fclose(f)
存储在
f
变量中的值不是对write
调用有效的文件描述符,而是lua内部文件对象。存储在f
变量中的值不是对write
调用有效的文件描述符,而是lua内部文件对象。