有没有办法让jnr为我构造一个struct,以便使用jnr访问返回的调用。
例如,如果我想使用
int statvfs(const char *path, struct statvfs *buf);其中struct statvfs为:
struct statvfs {
unsigned long f_bsize; /* file system block size */
unsigned long f_frsize; /* fragment size */
fsblkcnt_t f_blocks; /* size of fs in f_frsize units */
fsblkcnt_t f_bfree; /* # free blocks */
fsblkcnt_t f_bavail; /* # free blocks for unprivileged users */
fsfilcnt_t f_files; /* # inodes */
fsfilcnt_t f_ffree; /* # free inodes */
fsfilcnt_t f_favail; /* # free inodes for unprivileged users */
unsigned long f_fsid; /* file system ID */
unsigned long f_flag; /* mount flags */
unsigned long f_namemax; /* maximum filename length */
};我如何才能访问它?
发布于 2016-05-27 00:19:35
要使用C++结构,您应该定义扩展jnr.ffi.Struct的类。每个字段都应该有一个java类型,在jnr.ffi.Struct类中定义或从其中一个扩展而来。
例如,*.h文件中的short字段应该在结构类中定义为jnr.ffi.Struct.Signed16。
如果你需要一个数组字段,你必须使用静态方法初始化它,如下所示:
public final Signed8[] byteArray = array(new Signed8[8])https://stackoverflow.com/questions/21214328
复制相似问题