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

È stato utile?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top