JNA ByteBuffer statvfs
Posted
技术标签:
【中文标题】JNA ByteBuffer statvfs【英文标题】: 【发布时间】:2009-11-16 07:51:34 【问题描述】:我正在尝试使用来自 java 的 statvfs 调用来获取 / 文件夹上的可用空间,
我从 c 检查了 statvfs 结构的大小,它显示 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】:不是一个解决方案,而是一些想法。
-
你应该检查
fsblkcnt_t
类型的大小。我很肯定,它是 4 个字节,但这只是基于整个结构的 44 个字节的假设。
我想,f_blocks
字段第一个字节的索引是8,不是12。f_bsize
和f_frsize
各4个字节,一共8个字节,下一个值从第9位开始这是索引 8。
我对您的“订单”设置有点困惑。它不应该是“44”,而是Byteorder.BIG_ENDIAN
或ByteOrder.LITTLE_ENDIAN
。但也许这只是你的问题中的一个错字
您是否尝试过转储缓冲区内容或使用调试器查看缓冲区?它是否保持预期值?只是为了整理一下,如果问题与填充或读取缓冲区有关。
【讨论】:
以上是关于JNA ByteBuffer statvfs的主要内容,如果未能解决你的问题,请参考以下文章