Conceptos básicos de FFI: ffi.cdef y ffi.load
Declare tipos C y cargue bibliotecas compartidas con el módulo ffi de LuaJIT.
Conceptos básicos de FFI: ffi.cdef y ffi.load es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué es FFI?
La FFI (interfaz de funciones foráneas) de LuaJIT permite llamar a funciones de bibliotecas de C y utilizar estructuras de datos de C directamente desde Lua, sin necesidad de código envoltorio en C.
Requerir FFI
Cargue la biblioteca FFI con require("ffi"). Está integrada en LuaJIT y no está disponible en PUC Lua estándar.
local ffi = require("ffi")ffi.cdef: declarar tipos de C
ffi.cdef(cDeclarations) analiza declaraciones de C y pone los tipos y las firmas de funciones a disposición de FFI. No se compila código real; solo se proporciona información de tipos.
ffi.cdef[[
int printf(const char *fmt, ...);
double sqrt(double x);
typedef struct { int x; int y; } Point;
]]ffi.load: cargar una biblioteca compartida
ffi.load(libname) carga una biblioteca compartida y devuelve un objeto cuyos campos son las funciones de C declaradas.
local C = ffi.C -- access to libc on POSIX
local m = ffi.load("m") -- libm
print(m.sqrt(2.0)) -- 1.414...Acceder directamente a funciones de libc
En sistemas POSIX, ffi.C proporciona acceso a todas las funciones estándar de la biblioteca de C sin necesidad de una carga explícita.
ffi.cdef[[ int puts(const char *s); ]]
ffi.C.puts("Hello from C!")Ruta de ffi.load
Pase la ruta completa o el nombre de una biblioteca estándar. En Linux, use "m" para libm.so, "pthread" para pthreads, etc.
Declarar estructuras
Declare estructuras de C en cdef y, después, asígneles memoria y acceda a ellas desde Lua.
ffi.cdef[[
typedef struct { float x, y, z; } Vec3;
]]
local v = ffi.new("Vec3", {1, 2, 3})
print(v.x, v.y, v.z) -- 1.0 2.0 3.0Anotaciones y calificadores de tipos
cdef admite const, unsigned, int32_t, uint64_t y otros tipos estándar de C.
Varias llamadas a cdef
Puede llamar a ffi.cdef varias veces. Las declaraciones duplicadas se ignoran. Normalmente, debe organizarlas por biblioteca.
Diferencias entre plataformas
La disposición de las estructuras y las firmas de las funciones pueden variar según la plataforma (Windows frente a Linux, 32 bits frente a 64 bits). Use ffi.os y ffi.arch para declarar condicionalmente las firmas correctas.
Nota de seguridad
FFI omite la seguridad de tipos de Lua. Las declaraciones de C incorrectas provocan corrupción de memoria, errores de segmentación o comportamiento indefinido. Compruebe siempre las declaraciones con la cabecera de C real.
Pregunta sobre los conceptos básicos de FFI
¿Qué hace ffi.cdef?
Resumen: conceptos básicos de FFI
Use ffi.cdef para declarar tipos y funciones de C, y ffi.load para cargar bibliotecas compartidas. ffi.C proporciona acceso directo a libc. Verifique siempre que las declaraciones coincidan con las cabeceras de C reales para evitar la corrupción de memoria.
Preguntas frecuentes
¿La lección «Conceptos básicos de FFI: ffi.cdef y ffi.load» es gratis?
Sí — el texto completo de «Conceptos básicos de FFI: ffi.cdef y ffi.load» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Conceptos básicos de FFI: ffi.cdef y ffi.load»?
Declare tipos C y cargue bibliotecas compartidas con el módulo ffi de LuaJIT. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Conceptos básicos de FFI: ffi.cdef y ffi.load»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos básicos de FFI: ffi.cdef y ffi.load
- Llamada a funciones C mediante FFI
- Punteros, structs y arrays en FFI
- Callbacks: pasar funciones de Lua a C