2015-06-02 49 views
1

我試圖使用Lua FFI使用LuaJIT將一些文本追加到文件,但我不是很知道C,所以我有一些麻煩。這是代碼:使用Lua寫入文件FFI

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 
+1

存儲在你的'F的值'變量不是對'write'的調用有效的文件描述符,它是一個lua內部的文件對象。 –

回答

3

我已經解決了這個問題,用下面的代碼:

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)