java - JNA ByteBuffer statvfs

标签 java c jna bytebuffer

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

我已经检查了 c 中 statvfs 结构的大小,它显示 44 字节,我已经使用 java.nio.ByteBuffer.allocateDirect 分配了一个字节缓冲区 44 字节,并且它的顺序设置为 44 字节。 当我调用 statvfs 时,我得到的返回值为 0,所以我假设调用成功,但我似乎无法使用 buffer.getInt 返回 512 f_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 */

还是我的逻辑有问题?

最佳答案

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

  1. 您应该检查 fsblkcnt_t 类型的大小。我非常肯定它是 4 个字节,但这只是基于整个结构的 44 个字节的假设。
  2. 我认为,f_blocks字段的第一个字节的索引是8,而不是12。f_bsizef_frsize各是4个字节,总共8个字节,下一个值从第9个位置开始,即索引8。
  3. 我对您的“订单”设置有点困惑。它不应该是“44”,而应该是 Byteorder.BIG_ENDIANByteOrder.LITTLE_ENDIAN。但也许这只是您问题中的拼写错误

您是否尝试过转储缓冲区内容或使用调试器来查看缓冲区?它是否保持预期值?只是为了弄清楚问题是否与填充或读取缓冲区有关。

关于java - JNA ByteBuffer statvfs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1740701/

相关文章:

java - 如何访问输出参数值

java - 如何将指针传递给 JNA 中的结构?

Java - 我如何监控其他进程的内存和CPU使用情况

c - 0x0F6F8EF7 (msvcr120d.dll) 0xC0000005 : Access violation reading location 0x091C5B30 处未处理的异常

Windows 上的 C 与 Linux 上的 C - 差异

c - 不兼容的指针类型的赋值问题

java - JNA - 设置资源路径

java - ServiceBus over AMQP 关闭消费者

java - sql查询不更新JTable

java - Android单元测试如何创建ContentResolver stub ?