我正在尝试使用java的statvfs调用获取/文件夹上的可用空间,
我已经从c检查了statvfs结构的大小,它显示了44个字节,我使用java.nio.ByteBuffer.allocateDirect分配了一个字节缓冲区44个字节,并将其顺序设置为44个字节。
当我调用statvfs时,我得到的返回值为0,因此我假设调用成功,但是我似乎无法使用buffer.getInt返回512Buffer_bsize,这是正确的,但是在此之后我无法读取,因此我无法从ByteBuffer中获取信息。 。
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 */
还是我的逻辑上有毛病?
最佳答案
不是解决方案,而是一些想法。
您应该检查fsblkcnt_t
类型的大小。我非常肯定,它是4个字节,但这只是基于整个结构的44个字节的假设。
我认为,f_blocks
字段的第一个字节的索引是8,而不是12。f_bsize
和f_frsize
分别是4个字节,总共是8个字节,下一个值从索引的第九个位置开始8。
我对您的“订单”设置有些困惑。它不应为“ 44”,而应为Byteorder.BIG_ENDIAN
或ByteOrder.LITTLE_ENDIAN
。但这可能只是您输入中的错字
您是否尝试过转储缓冲区内容或使用调试器来窥视缓冲区?它保持期望值吗?只是为了解决问题是否与填充或读取缓冲区有关。