2009-11-16 6 views
0

Я пытаюсь получить свободное пространство на/папки с помощью statvfs звонить из Явы,ЮНА ByteBuffer statvfs

меня проверить размер statvfs структуры из с он показывает 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. вы должны проверить размер fsblkcnt_t. Я вполне уверен, что это 4 байта, но это всего лишь предположение, основанное на ваших 44 байтах для всей структуры.
  2. Я считаю, индекс первого байта f_blocks поля составляет 8, а не 12. f_bsize и f_frsize 4 байта каждого, общая сумма составляет 8 байт, следующее значение начинается в девятом положении, которое индекс 8.
  3. Я немного смущен настройкой вашего заказа. Это не должно быть «44», но либо Byteorder.BIG_ENDIAN, либо ByteOrder.LITTLE_ENDIAN. Но, может быть, это только опечатка в вашем вопросе

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