JNA ByteBuffer statvfs

时间:2009-11-16 07:51:34

标签: java c jna bytebuffer

我正在尝试使用java中的statvfs调用来获取/文件夹上的可用空间,

我从c中检查了statvfs struct的大小,它显示了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 个答案:

答案 0 :(得分:1)

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

  1. 您应该检查fsblkcnt_t类型的大小。我非常肯定,它是4个字节,但这只是基于整个结构的44个字节的假设。
  2. 我认为,f_blocks字段的第一个字节的索引是8,而不是12. f_bsizef_frsize各4个字节,总数是8个字节,下一个值从第9个位置开始,即第8个位置。
  3. 我对你的“订单”设置感到有点困惑。它不应该是'44',而是Byteorder.BIG_ENDIANByteOrder.LITTLE_ENDIAN。但也许这只是你问题中的一个错字
  4. 您是否尝试过转储缓冲区内容或使用调试程序来查看缓冲区?它是否符合预期值?只是为了解决问题,如果问题与填充或读取缓冲区有关。