JNA ByteBuffer statvfs - PullRequest
       9

JNA ByteBuffer statvfs

0 голосов
/ 16 ноября 2009

Я пытаюсь получить свободное место в папке / с помощью statvfs call из java,

Я проверил размер структуры statvfs из c, он показывает 44 байта, я выделил байтовый буфер с помощью java.nio.ByteBuffer.allocateDirect 44 байта, и его порядок установлен в 44 байта. когда я вызываю statvfs, я получаю возвращаемое значение 0, поэтому я предполагаю, что вызов успешен, но я не могу получить информацию из ByteBuffer с помощью buffer.getInt возвращает 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 Ответ

1 голос
/ 16 ноября 2009

Не решение, а несколько мыслей.

  1. Вы должны проверить размер fsblkcnt_t типа. Я уверен, что это 4 байта, но это всего лишь предположение, основанное на ваших 44 байтах для всей структуры.
  2. Я думаю, индекс первого байта поля f_blocks равен 8, а не 12. f_bsize и f_frsize - по 4 байта, общее количество - 8 байтов, следующее значение начинается с девятой позиции который является индексом 8.
  3. Я немного озадачен настройкой вашего "заказа". Это должен быть не 44, а Byteorder.BIG_ENDIAN или ByteOrder.LITTLE_ENDIAN. Но, возможно, это просто опечатка в вашем вопросе

Вы пытались сбросить содержимое буфера или использовали отладчик, чтобы заглянуть в буфер? Содержит ли он ожидаемые значения? Просто чтобы разобраться, если проблема связана с заполнением или чтением буфера.

...