Podstawy FFI: ffi.cdef i ffi.load
Proszę deklarować typy C i ładować biblioteki współdzielone za pomocą modułu ffi LuaJIT.
Podstawy FFI: ffi.cdef i ffi.load to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Czym jest FFI?
FFI (Foreign Function Interface) LuaJIT pozwala wywoływać funkcje bibliotek C i bezpośrednio używać struktur danych C z poziomu Lua, bez konieczności pisania kodu opakowującego w C.
Wymaganie FFI
Bibliotekę FFI należy załadować za pomocą require("ffi"). Jest ona wbudowana w LuaJIT i niedostępna w standardowym PUC Lua.
local ffi = require("ffi")ffi.cdef: deklarowanie typów C
ffi.cdef(cDeclarations) analizuje deklaracje C i udostępnia FFI typy oraz sygnatury funkcji. Nie jest kompilowany żaden rzeczywisty kod — zapisywane są tylko informacje o typach.
ffi.cdef[[
int printf(const char *fmt, ...);
double sqrt(double x);
typedef struct { int x; int y; } Point;
]]ffi.load: ładowanie biblioteki współdzielonej
ffi.load(libname) ładuje bibliotekę współdzieloną i zwraca obiekt, którego pola zawierają zadeklarowane funkcje C.
local C = ffi.C -- access to libc on POSIX
local m = ffi.load("m") -- libm
print(m.sqrt(2.0)) -- 1.414...Bezpośredni dostęp do funkcji libc
W systemach POSIX ffi.C zapewnia dostęp do wszystkich standardowych funkcji biblioteki C bez jawnego ładowania.
ffi.cdef[[ int puts(const char *s); ]]
ffi.C.puts("Hello from C!")Ścieżka w ffi.load
Należy przekazać pełną ścieżkę lub standardową nazwę biblioteki. W systemie Linux należy użyć "m" dla libm.so, "pthread" dla biblioteki pthreads itd.
Deklarowanie struktur
Struktury C należy zadeklarować w cdef, a następnie alokować i uzyskiwać do nich dostęp z poziomu 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.0Adnotacje i kwalifikatory typów
cdef obsługuje const, unsigned, int32_t, uint64_t oraz inne standardowe typy C.
Wielokrotne wywołania cdef
Można wielokrotnie wywoływać ffi.cdef. Zduplikowane deklaracje są ignorowane. Zazwyczaj deklaracje organizuje się według bibliotek.
Różnice między platformami
Układ struktur i sygnatury funkcji mogą różnić się w zależności od platformy (Windows i Linux, 32-bitowa i 64-bitowa). Należy używać ffi.os i ffi.arch, aby warunkowo deklarować poprawne sygnatury.
Uwaga dotycząca bezpieczeństwa
FFI omija bezpieczeństwo typów Lua. Niepoprawne deklaracje C powodują uszkodzenie pamięci, błędy segmentacji lub niezdefiniowane zachowanie. Deklaracje należy zawsze dokładnie sprawdzić w rzeczywistym nagłówku C.
Pytanie dotyczące podstaw FFI
Co robi ffi.cdef?
Podsumowanie: podstawy FFI
Należy używać ffi.cdef do deklarowania typów i funkcji C, a ffi.load do ładowania bibliotek współdzielonych. ffi.C zapewnia bezpośredni dostęp do libc. Aby uniknąć uszkodzenia pamięci, należy zawsze sprawdzać zgodność deklaracji z rzeczywistymi nagłówkami C.
Często zadawane pytania
Czy lekcja „Podstawy FFI: ffi.cdef i ffi.load” jest bezpłatna?
Tak — pełny tekst „Podstawy FFI: ffi.cdef i ffi.load” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Podstawy FFI: ffi.cdef i ffi.load”?
Proszę deklarować typy C i ładować biblioteki współdzielone za pomocą modułu ffi LuaJIT. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Podstawy FFI: ffi.cdef i ffi.load”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy FFI: ffi.cdef i ffi.load
- Wywoływanie funkcji C przez FFI
- Wskaźniki, struktury i tablice w FFI
- Callbacki: przekazywanie funkcji Lua do C