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)?

¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top