Blockieren Sie Geräteinformationen, ohne sie unter Linux zu mounten
-
29-10-2019 - |
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.)
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);