Значение#
Дополнительный тип LuaJIT для указателей, структур и C-чисел. ffi.string копирует C-строку в Lua string; ffi.cast меняет представление типа, но не доказывает валидность адреса. Срок жизни памяти нужно устанавливать отдельно.
Пример#
local ffi = require("ffi")
local value = ffi.new("uint64_t", 42)
local kind = type(value) -- cdata
local bytes = ffi.sizeof(value)Что произойдёт: value содержит uint64_t со значением 42; kind = "cdata"; bytes = 8.
Этот фрагмент не печатает сообщение и не пишет его в журнал. Здесь указаны ожидаемые значения примера.
Методы и связанные вызовы#
| Функция | Возвращает | Назначение |
|---|---|---|
| ffi.cast | cdata |
Создаёт скалярное cdata заданного C-типа через преобразование. Валидность адреса этим не проверяется. |
| ffi.cdef | none |
Объявляет C-типы и сигнатуры для FFI. Это не загрузка библиотеки и не реализация функции. |
| ffi.copy | none |
Копирует байты в подготовленный буфер. Без длины допустима строка Lua: копируется также нулевой терминатор. |
| ffi.new | cdata |
Выделяет и инициализирует cdata. Размер обязателен только для массивов или структур переменной длины. |
| ffi.sizeof | number | nil |
Возвращает размер C-типа или cdata в байтах; размер неизвестного типа может быть nil. |
| ffi.string | string |
Копирует данные C-указателя в строку Lua. Без длины читает до нулевого байта. |