Bloquear la información del dispositivo sin montar en Linux
-
29-10-2019 - |
Pregunta
Estoy tratando de obtener información (específicamente el tamaño del bloque) del dispositivo de bloque en Linux, en C ++.¿Es posible obtener el tamaño de bloque de un dispositivo sin montarlo y posiblemente sin mirar archivos dinámicos (como los de /sys
), pero solo con una llamada al sistema?
Estaba intentando con stat
, pero devuelve datos sobre el sistema de archivos /dev
si pregunto sobre /dev/sdb2
.
Si es imposible con la llamada al sistema, ¿dónde debería buscar en los archivos dinámicos (tampoco he podido localizarlo)?
Solución
Quiere utilizar ioctl
, en particular BLKSSZGET
.
Citando linux / fs.h:
#define BLKSSZGET _IO(0x12,104)/* get block device sector size */
Ejemplo no probado:
#include <sys/ioctl.h>
#include <linux/fs.h>
int fd = open("/dev/sda");
size_t blockSize;
int rc = ioctl(fd, BLKSSZGET, &blockSize);
Otros consejos
Creo que el valor ioctl
debería ser unsigned long
en lugar de size_t
(el último está más relacionado con la memoria), también lo inicializaría a 0 (en caso de que BLKSSZGET
devuelva unsigned int
en su lugar).
#include <sys/ioctl.h>
#include <linux/fs.h>
int fd = open("/dev/sda");
unsigned long blockSize = 0;
int rc = ioctl(fd, BLKSSZGET, &blockSize);