我正在使用 CFFI 从 Python 调用返回结构的 C 函数。该结构是用一个time_t
元素定义的。如何将结构声明为 CFFI,以便我可以从 Python 访问它?
例如,我尝试了以下(获取文件的修改时间):
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 <sys/stat.h>")
这给出了一个错误:
cffi.api.CDefError: cannot parse " time_t tv_sec;"
:5: before: time_t
它在注释掉该行后编译time_t tv_sec;
,但当然你不能访问该tv_sec
字段。据推测,CFFI 的 C 解析器不支持 typedef。您不能只替换time_t
为实际类型,因为不同平台上的类型可能不同。