Blocca le informazioni sul dispositivo senza montarle in Linux
-
29-10-2019 - |
Domanda
Sto cercando di ottenere alcune informazioni (in particolare la dimensione del blocco) del dispositivo a blocchi in Linux, in C ++.È possibile ottenere la dimensione del blocco di un dispositivo senza montarlo e possibilmente senza esaminare i file dinamici (come quelli in /sys
), ma solo con una chiamata di sistema.
Stavo provando con stat
, ma restituisce dati sul filesystem /dev
se chiedo informazioni su /dev/sdb2
.
Se è impossibile con la chiamata di sistema, dove dovrei cercare nei file dinamici (non sono stato nemmeno in grado di individuarlo.)
Soluzione
Desideri utilizzare ioctl
, in particolare BLKSSZGET
.
Citando linux / fs.h:
#define BLKSSZGET _IO(0x12,104)/* get block device sector size */
Esempio non testato:
#include <sys/ioctl.h>
#include <linux/fs.h>
int fd = open("/dev/sda");
size_t blockSize;
int rc = ioctl(fd, BLKSSZGET, &blockSize);
Altri suggerimenti
Penso che il valore ioctl
dovrebbe essere piuttosto unsigned long
che size_t
(l'ultimo è più relativo alla memoria), lo inizializzerei anche a 0 (nel caso in cui BLKSSZGET
restituisca invece unsigned int
).
#include <sys/ioctl.h>
#include <linux/fs.h>
int fd = open("/dev/sda");
unsigned long blockSize = 0;
int rc = ioctl(fd, BLKSSZGET, &blockSize);