CFFI を使用して、構造体を返す Python から C 関数を呼び出しています。構造体は要素で定義されtime_tます。Python からアクセスできるように、構造体を CFFI に宣言するにはどうすればよいですか?
たとえば、次のことを試しました(ファイルの変更時刻を取得するため):
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異なるプラットフォームでは型が異なる可能性があるため、実際の型に置き換えることはできません。