2009-11-16 44 views
0

我试图让使用statvfs从Java调用/文件夹中的自由空间,JNA的ByteBuffer statvfs

我有检查statvfs结构的大小从C它显示了44个字节,我一直在使用分配的字节缓冲区java.nio.ByteBuffer.allocateDirect 44个字节,它的顺序设置为44个字节。 当我调用statvfs我得到一个返回值为0,所以我假设调用是成功的,但我似乎无法获取信息使用buffer.getInt ByteBuffer返回512 f_bsize这是正确的,但之后,我不能读。

buffer.getInt(12)应该给我f_blocks,但我得到0

unsigned long f_bsize; /* File system block size */ 
unsigned long f_frsize; /* Fundamental file system block size */ 
fsblkcnt_t f_blocks; /* Blocks on FS in units of f_frsize */ 

还是我有错在我的逻辑是什么?

回答

1

不是一个解决方案,而是一些想法。

  1. 你应该检查fsblkcnt_t类型的大小。我相当积极,它是4个字节,但这只是基于整个结构的44个字节的假设。
  2. 我想,f_blocks字段的第一个字节的索引为8,而不是12 f_bsizef_frsize各自4个字节,总为8个字节,下一个值开始在第九位置,该位置索引8.
  3. 我对你的'订单'设置有点困惑。它不应该是'44',而是Byteorder.BIG_ENDIANByteOrder.LITTLE_ENDIAN。但也许这只是你的问题中的一个错字

有没有尝试转储缓冲区内容或使用调试器来查看缓冲区?它是否保持预期值?只是为了解决问题,如果问题与填充或读取缓冲区有关。