Некоторые стандартные библиотеки C, к которым я хочу получить доступ с помощью Cython, имеют массу флагов. Документы Cython заявляют, что я должен воспроизвести те части заголовка, которые мне нужны. Что хорошо, когда дело доходит до определений функций. Они обычно тиражируются повсюду, включая документы. Но как насчет всех этих магических чисел?
Если я хочу вызвать mmap
, я всегда могу найти определение функции и вставить его в файл .pxd:
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset)
Но для его вызова нужна тонна флагов, таких как PROT_READ
, MAP_ANONYMOUS
и так далее. У меня есть как минимум две проблемы с этим:
Во-первых, надоедливо выслеживать, где именно эти числа определены. На самом деле я предпочел бы написать файл .c и распечатать нужные мне значения. Есть ли лучший способ найти значение данного флага, например PROT_READ
?
Во-вторых, насколько стабильны эти числа? Извлекая все нужные мне значения и жестко запрограммировав их в исходный код Cython, каковы шансы того, что компиляция на другой платформе переключилась, скажем, PROT_READ
и PROT_EXEC
?
Даже если ответ таков, что нет хороших или правильных способов сделать это, я бы хотел услышать это. Я всегда могу смириться с тем, что что-то громоздко, если я знаю, что что-то не упустил.