0Pricing
Lua Academy · Lekcja

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.0

Adnotacje 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

  1. Podstawy FFI: ffi.cdef i ffi.load
  2. Wywoływanie funkcji C przez FFI
  3. Wskaźniki, struktury i tablice w FFI
  4. Callbacki: przekazywanie funkcji Lua do C
← Powrót do Lua Academy