Frage

Ich versuche, einige Informationen (insbesondere die Blockgröße) des Blockgeräts unter Linux in C ++ abzurufen.Ist es möglich, die Blockgröße eines Geräts zu ermitteln, ohne es zu mounten und möglicherweise ohne dynamische Dateien (wie die im /sys) zu untersuchen, jedoch nur mit einem Systemaufruf.

Ich habe es mit stat versucht, aber es werden Daten zum /dev-Dateisystem zurückgegeben, wenn ich nach /dev/sdb2 frage.

Wenn es mit einem Systemaufruf unmöglich ist, wo soll ich in dynamischen Dateien suchen (konnte es auch nicht finden.)

War es hilfreich?

Lösung

Sie möchten ioctl verwenden, insbesondere BLKSSZGET.

Zitieren von Linux / fs.h:

#define BLKSSZGET  _IO(0x12,104)/* get block device sector size */

Ungetestetes Beispiel:

#include <sys/ioctl.h>
#include <linux/fs.h>

int fd = open("/dev/sda");
size_t blockSize;
int rc = ioctl(fd, BLKSSZGET, &blockSize);

Andere Tipps

Ich denke, der ioctl-Wert sollte eher unsigned long als size_t sein (der neueste ist speicherbezogener). Ich würde ihn auch auf 0 initialisieren (nur für den Fall, dass BLKSSZGET stattdessen unsigned int zurückgibt).

#include <sys/ioctl.h>
#include <linux/fs.h>

int fd = open("/dev/sda");
unsigned long blockSize = 0;
int rc = ioctl(fd, BLKSSZGET, &blockSize);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top