Некоторые стандартные библиотеки 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
?
Даже если ответ заключается в том, что нет хороших или правильных способов сделать это, я хотел бы его услышать. Я всегда могу принять, что что-то громоздко, если я знаю, что ничего не упускаю.