2015-06-02 2 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 'variable не является дескриптором файла, действительным для вызова' 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) 

 Смежные вопросы

  • Нет связанных вопросов^_^