Déclarez la structure contenant le champ time_t dans Python CFFI

J’utilise CFFI pour appeler une fonction C de Python qui renvoie une structure. La structure est définie avec un élément time_t . Comment déclarer la structure au CFFI pour pouvoir y accéder depuis Python?

Par exemple, j’ai essayé ce qui suit (pour obtenir l’heure modifiée d’un fichier):

 import cffi ffi = cffi.FFI() ffi.cdef(""" // From POSIX struct timespec { time_t tv_sec; long tv_nsec; ...; }; struct stat { struct timespec st_mtim; ...; }; // From "man 2 lstat" int lstat(const char *path, struct stat *buf); """) stat = ffi.verify("#include ") 

Cela donne une erreur:

 cffi.api.CDefError: cannot parse " time_t tv_sec;" :5: before: time_t 

Il comstack après avoir commenté la ligne time_t tv_sec; , mais vous ne pouvez bien sûr pas accéder au champ tv_sec . Vraisemblablement, l’parsingur C de CFFI ne prend pas en charge les types de fichiers. Vous ne pouvez pas simplement remplacer time_t par le type actuel, car le type peut être différent sur différentes plates-formes.

Je crains qu’il n’y ait pas de bonne réponse. Vous devez écrire typedef long time_t; ou similaire, en supposant que time_t a toujours la même taille que long. Si le code est censé être portable sur des plates-formes où time_t peut être différent, vous devez obtenir séparément la taille:

 ffi1 = cffi.FFI() ffi1.cdef("""#define SIZE_OF_TIME_T ...""") lib = ffi1.verify(""" #include  #define SIZE_OF_TIME_T sizeof(time_t) """) size_of_time_t = lib.SIZE_OF_TIME_T