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
異なるプラットフォームでは型が異なる可能性があるため、実際の型に置き換えることはできません。