2009-11-16 3 views
0

난에서 statvfs 자바에서 호출 사용하여/폴더의 여유 공간을 얻기 위해 노력하고,JNA의 ByteBuffer에서 statvfs

나는 그것이 44 바이트를 보여줍니다 c를, 내가 사용 byte 버퍼를 할당 한에서에서 statvfs 구조체의 크기를 확인해야 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

해결책은 아니지만 몇 가지 생각입니다.

  1. fsblkcnt_t 유형을 확인해야합니다. 저는 4 바이트라고 아주 긍정적입니다.하지만 이것은 전체 구조체의 44 바이트를 기반으로 한 가정에 지나지 않습니다. I 생각
  2. 에서, f_blocks 필드의 첫 번째 바이트의 인덱스하지 12 f_bsizef_frsize 4 바이트 각각은 총 8 바이트이다, 8, 다음 값 인덱스 8
  3. 이며, 본원 위치에서 시작
  4. '주문'설정에 대해 다소 혼란 스럽습니다. '44'가 아니며 Byteorder.BIG_ENDIAN 또는 ByteOrder.LITTLE_ENDIAN입니다. 하지만 질문에 오타가있을 수도 있습니다.

버퍼 내용을 덤프했거나 디버거를 사용하여 버퍼를 들여다 보았습니까? 예상 값을 보유하고 있습니까? 문제가 버퍼를 채우거나 읽는 것과 관련이 있다면 정렬 만하면됩니다.