Question

J'essaie d'obtenir des informations (spécifiquement la taille du bloc) du périphérique de bloc dans Linux, en C ++. Est-il possible d'obtenir la taille du bloc d'un appareil sans le monter et peut-être sans examiner des fichiers dynamiques (comme ceux dans /sys), mais avec un appel système uniquement.

J'essayais avec stat, mais il renvoie des données sur /dev Système de fichiers si je pose des questions sur /dev/sdb2.

Si c'est impossible avec l'appel système, où devrais-je regarder dans des fichiers dynamiques (je n'ai pas pu le localiser non plus.)

Était-ce utile?

La solution

Vous voulez utiliser ioctl, en particulier BLKSSZGET.

Citant Linux / Fs.H:

#define BLKSSZGET  _IO(0x12,104)/* get block device sector size */

Exemple non testé:

#include <sys/ioctl.h>
#include <linux/fs.h>

int fd = open("/dev/sda");
size_t blockSize;
int rc = ioctl(fd, BLKSSZGET, &blockSize);

Autres conseils

Je pense que le ioctl la valeur devrait plutôt être unsigned long que size_t (le dernier est plus lié à la mémoire), je l'initialiserais également à 0 (juste au cas où BLKSSZGET Retour unsigned int Au lieu).

#include <sys/ioctl.h>
#include <linux/fs.h>

int fd = open("/dev/sda");
unsigned long blockSize = 0;
int rc = ioctl(fd, BLKSSZGET, &blockSize);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top