Notions de base sur FFI : ffi.cdef et ffi.load
Déclarez des types C et chargez des bibliothèques partagées avec le module ffi de LuaJIT.
Notions de base sur FFI : ffi.cdef et ffi.load est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.
Qu’est-ce que la FFI ?
La FFI (interface de fonctions externes) de LuaJIT vous permet d’appeler des fonctions de bibliothèques C et d’utiliser directement des structures de données C depuis Lua, sans avoir besoin d’écrire de code d’encapsulation en C.
Charger la FFI
Chargez la bibliothèque FFI avec require("ffi"). Elle est intégrée à LuaJIT et n’est pas disponible dans Lua PUC standard.
local ffi = require("ffi")ffi.cdef : déclarer des types C
ffi.cdef(cDeclarations) analyse les déclarations C et rend les types ainsi que les signatures de fonctions disponibles pour la FFI. Aucun code réel n’est compilé : seules les informations de type le sont.
ffi.cdef[[
int printf(const char *fmt, ...);
double sqrt(double x);
typedef struct { int x; int y; } Point;
]]ffi.load : charger une bibliothèque partagée
ffi.load(libname) charge une bibliothèque partagée et renvoie un objet dont les champs sont les fonctions C déclarées.
local C = ffi.C -- access to libc on POSIX
local m = ffi.load("m") -- libm
print(m.sqrt(2.0)) -- 1.414...Accéder directement aux fonctions de libc
Sur les systèmes POSIX, ffi.C permet d’accéder à toutes les fonctions standard de la bibliothèque C sans chargement explicite.
ffi.cdef[[ int puts(const char *s); ]]
ffi.C.puts("Hello from C!")Chemin de ffi.load
Transmettez le chemin complet ou le nom d’une bibliothèque standard. Sous Linux, utilisez "m" pour libm.so, "pthread" pour pthreads, etc.
Déclarer des structures
Déclarez les structures C dans cdef, puis allouez-les et accédez-y depuis 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.0Annotations de type et qualificatifs
cdef prend en charge const, unsigned, int32_t, uint64_t et d’autres types C standard.
Appels multiples de cdef
Vous pouvez appeler ffi.cdef plusieurs fois. Les déclarations en double sont ignorées. En général, organisez-les par bibliothèque.
Différences entre les plateformes
La disposition des structures et les signatures de fonctions peuvent varier selon la plateforme (Windows ou Linux, 32 ou 64 bits). Utilisez ffi.os et ffi.arch pour déclarer conditionnellement les signatures correctes.
Remarque sur la sécurité
La FFI contourne la sûreté des types de Lua. Des déclarations C incorrectes provoquent une corruption de la mémoire, des erreurs de segmentation ou un comportement indéfini. Vérifiez toujours attentivement les déclarations par rapport à l’en-tête C réel.
Question sur les bases de la FFI
Que fait ffi.cdef ?
Récapitulatif : bases de la FFI
Utilisez ffi.cdef pour déclarer les types et fonctions C, et ffi.load pour charger les bibliothèques partagées. ffi.C donne un accès direct à libc. Vérifiez toujours que les déclarations correspondent aux en-têtes C réels afin d’éviter toute corruption de la mémoire.
Apprends Lua avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 40
- Leçons
- 159
Questions Fréquemment Posées
La leçon « Notions de base sur FFI : ffi.cdef et ffi.load » est-elle gratuite ?
Oui — le texte complet de « Notions de base sur FFI : ffi.cdef et ffi.load » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Notions de base sur FFI : ffi.cdef et ffi.load » ?
Déclarez des types C et chargez des bibliothèques partagées avec le module ffi de LuaJIT. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Lua Academy ?
Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Notions de base sur FFI : ffi.cdef et ffi.load » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?
Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Notions de base sur FFI : ffi.cdef et ffi.load
- Appeler des fonctions C via FFI
- Pointeurs, structures et tableaux en FFI
- Fonctions de rappel : transmettre des fonctions Lua à C