2009-11-16 41 views
0

我試圖讓使用statvfs從Java調用/文件夾中的自由空間,JNA的ByteBuffer statvfs

我有檢查statvfs結構的大小從C它顯示了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

不是一個解決方案,而是一些想法。

  1. 你應該檢查fsblkcnt_t類型的大小。我相當積極,它是4個字節,但這只是基於整個結構的44個字節的假設。
  2. 我想,f_blocks字段的第一個字節的索引爲8,而不是12 f_bsizef_frsize各自4個字節,總爲8個字節,下一個值開始在第九位置,該位置索引8.
  3. 我對你的'訂單'設置有點困惑。它不應該是'44',而是Byteorder.BIG_ENDIANByteOrder.LITTLE_ENDIAN。但也許這只是你的問題中的一個錯字

有沒有嘗試轉儲緩衝區內容或使用調試器來查看緩衝區?它是否保持預期值?只是爲了解決問題,如果問題與填充或讀取緩衝區有關。