Всем привет. Не сильно надеюсь, что будет ответ, но вдруг
Играюсь с GraalVM и прямому доступу к линуксу.
С вызовом функций с простыми типами, как
mmap,
strerror, ну и всяким прочим open/close/write/read проблем добраться и использовать нет.
Проблемы приши после попыток дотянуться до
ioctl, а именно когда пришлось передавать стуктуры и указатели на структуру.
Скупая документация на GraalVM фактически
сводится к одному примеру , который не особо помог с ответом.
А нужно протянуть в java что-то примерно такое:
typedef union my_union
{
uint8_t bb;
uint16_t ww;
uint8_t arr[32]; // <-- Проблема раз, как заалоцировать
} my_union;
typedef struct my_struct
{
char cc;
int size;
union my_union *data ; // <-- Проблема как создать и присобачить указатель на union тут
} my_struct;
В Graal это привращается во что-то такое (оно даже компиляется и запускается):
@CStruct("my_union")
public interface my_union extends PointerBase {
@CField("bb")
byte getBb();
@CField("bb")
void setBb(byte b);
@CField("ww")
short getWw();
@CField("ww")
void setWw(short word);
@CFieldAddress("arr")
Pointer getBlock(); // Какой тут тип должен быть?
}
@CStruct("my_struct")
public interface my_struct extends Pointer {
@CField("сс")
byte getСс();
@CField("сс")
void setСс(byte rw);
@CField("size")
int getSize();
@CField("size")
void setSize(int size);
@CFieldAddress("data")
CIntPointer getData(); // Какой тут тип должен быть? И как установить указатель на my_union
}
При передаче в таком виде, оно падает с ошибкой ioctl failed: -1
Соответственно вопросы:
1. Как правильно объявить структуры в GraalVM
2. Как правильно инициализировать и установить указатели.
Либо хотя бы как отдэбажить что native-image генерит(оно в момент трет исходики нативные) и что в ioctl пришло. Заранее благодарен за ответы.