Certaines bibliothèques C standard auxquelles je veux accéder avec Cython ont une tonne de drapeaux. Les documents Cython indiquent que je dois répliquer les parties de l'en-tête dont j'ai besoin. Ce qui est bien quand il s'agit de définitions de fonctions. Ils sont généralement reproduits partout, docs inclus. Mais qu'en est-il de tous ces nombres magiques?Accès aux nombres/drapeaux magiques d'en-tête C avec Cython
Si je veux appeler mmap
, je peux toujours trouver la définition de la fonction et le coller dans un fichier .pxd:
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset)
Mais l'appelant a besoin d'une tonne de drapeaux comme PROT_READ
, MAP_ANONYMOUS
et ainsi de suite. J'ai au moins deux problèmes avec ceci:
Premièrement, c'est un travail ennuyeux de traquer exactement où ces nombres sont définis. En fait, je préfère écrire un fichier .c et imprimer les valeurs dont j'ai besoin. Existe-t-il un meilleur moyen de trouver la valeur d'un drapeau donné tel que PROT_READ
?
Deuxièmement, dans quelle mesure ces chiffres sont-ils stables? Après avoir extrait toutes les valeurs dont j'ai besoin et les avoir codées en dur dans ma source Cython, quelles sont les chances que la compilation sur une plate-forme différente ait changé, disons PROT_READ
et PROT_EXEC
?
Même si la réponse est qu'il n'y a pas de bonnes ou de bonnes façons de le faire, j'aimerais l'entendre. Je peux toujours accepter que quelque chose soit lourd tant que je sais que je ne manque pas quelque chose.
La situation de portabilité est mauvaise: certaines valeurs sont définies par POSIX, d'autres non. Les POSIX sont à peu près corrigés, les autres peuvent varier d'une plateforme à l'autre. –