Bloquer les informations sur l'appareil sans montage dans Linux
-
29-10-2019 - |
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.)
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);