如何使用java int来推断一个俱乐部结构

时间:2014-01-19 07:41:02

标签: java jnr clib

jnr是否有办法为我构造一个结构,以便使用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 */
};

我怎样才能访问它?

1 个答案:

答案 0 :(得分:1)

要使用C ++结构,您应该定义扩展jnr.ffi.Struct的类。每个字段都应该有一个java类型,在jnr.ffi.Struct类中定义或从其中一个扩展。

例如* .h文件中的short字段应该在struct class中定义为jnr.ffi.Struct.Signed16

如果您需要一个数组字段,必须使用静态方法Struct.array(Struct.Signed8[] array)对其进行初始化,如下所示:

public final Signed8[] byteArray = array(new Signed8[8])