2009-11-16 20 views
0

Je suis en train d'obtenir l'espace libre sur le/dossier à l'aide statvfs appel de java,JNA ByteBuffer statvfs

je vérifier la taille de struct statvfs de c il montre 44 octets, j'ai alloué un tampon d'octets en utilisant java.nio.ByteBuffer.allocateDirect 44 octets, et son ordre est fixé à 44 octets. quand j'appelle statvfs j'obtiens une valeur de retour de 0, donc je suppose que l'appel est réussi, mais je ne peux pas sembler obtenir l'information de ByteBuffer en utilisant buffer.getInt retourne 512 f_bsize qui est correct mais après que je ne peux pas lis.

buffer.getInt (12) devrait me donner f_blocks mais je reçois 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 */ 

ou dois-je une faute dans ma logique?

Répondre

1

Pas une solution mais quelques réflexions.

  1. vous devriez vérifier la taille du type fsblkcnt_t. Je suis assez positif, c'est 4 octets, mais c'est juste une hypothèse basée sur vos 44 octets pour toute la structure.
  2. je crois, l'index du premier octet du champ est f_blocks 8, pas 12. f_bsize et f_frsize sont 4 octets chacun, le total est de 8 octets, la valeur suivante à partir de la position index qui est nineth 8.
  3. Je suis un peu confus au sujet de votre «commande» paramètre. Il ne devrait pas être «44» mais Byteorder.BIG_ENDIAN ou ByteOrder.LITTLE_ENDIAN. Mais peut-être que c'est juste une faute de frappe dans votre question

Avez-vous essayé de vider le contenu du tampon ou utilisé un débogueur pour jeter un coup d'oeil dans le tampon? Est-ce qu'il contient les valeurs attendues? Juste pour trier, si le problème est lié au remplissage ou à la lecture du tampon.