0

我正在尝试使用来自 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 */

还是我的逻辑有问题?

4

1 回答 1

1

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

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

您是否尝试过转储缓冲区内容或使用调试器查看缓冲区?它是否保持预期值?只是整理一下,如果问题与填充或读取缓冲区有关。

于 2009-11-16T08:28:22.037 回答