Wie bekomme ich Hardware-Informationen in Linux mit C ++?

8

Ich muss die Spezifikationen der Festplatte sowohl auf Win- als auch auf * nix-Maschinen erhalten. Ich habe <hdreg.h> unter Linux so verwendet:

%Vor%

Ich brauche hd_driveid , um mir mehr Informationen über die Festplatte zu geben. Ich möchte wissen:

  • Anzahl der Partitionen
  • Spezifikationen jeder Partition (Format, Label, Flags, Größe, Startpunkt, Anzahl der Tracks usw.)
  • Anzahl der Spuren pro Zylinder
  • Anzahl der gesamten Tracks
  • Maximale Blockgröße
  • Minimale Blockgröße
  • Standardblockgröße
  • Gesamtgröße des Geräts

Meine Fragen sind:

  1. Gibt es eine Gemeinsamkeit? (plattformunabhängiger) Weg zu Hardware anschließen? Ich würde gerne verwenden gleicher Code für win und * nix. (selbst wenn es gab keinen anderen Weg als Einbetten von Baugruppencode in cpp)
  2. Wenn nicht, wie bekomme ich die Informationen in * nix?
sorush-r 04.03.2011, 12:21
quelle

5 Antworten

9

Fast alles in Ihrer Liste hat nichts mit "Spezifikationen der Festplatte" zu tun:

  • Die Anzahl der Partitionen hängt vom Lesen der Partitionstabelle ab, und wenn Sie erweiterte Partitionen haben, die Partitionstabellen dieser Partitionen. Das Betriebssystem wird dieses Bit normalerweise für Sie verwenden, wenn der Gerätetreiber geladen wird.
  • Partitionsinformationen (insbesondere die Datenträgerbezeichnung) sind in der Partitionstabelle normalerweise nicht verfügbar. Sie müssen den Dateisystemtyp erraten und den Dateisystemheader analysieren. Die einzige Sache in der Partitionstabelle ist das "Typ" Byte, das Ihnen nicht viel sagt, und der Start / Größe.
  • Festplatten geben Ihnen keine "echten" CHS-Informationen. Darüber hinaus ist die CHS-Information, die das Laufwerk bereitstellt, aus der Sicht des BIOS "falsch" (das BIOS führt sein eigenes Fudging aus).
  • Festplatten haben eine feste Sektorgröße, die Sie mit hd_driveid.sector_bytes (normalerweise 512, aber einige moderne Laufwerke verwenden 4096) erreichen können. Mir ist keine maximale "Blockgröße" bekannt, die eine Eigenschaft des Dateisystems ist. Ich bin mir auch nicht sicher, warum das nützlich ist.
  • Die Gesamtgröße in Sektoren ist in hd_driveid.lba_capacity_2 . Darüber hinaus kann die Größe in Bytes wahrscheinlich mit etwas wie

    erhalten werden %Vor%

    Beachten Sie, dass es in beiden Fällen wahrscheinlich einige Megabyte größer ist als die Größen, die mit C × H × S berechnet werden.

Es könnte helfen, wenn Sie uns sagen, warum Sie diese Information haben wollten ...

    
tc. 04.03.2011, 13:05
quelle
3

Nein, es gibt keinen plattformunabhängigen Weg. Es gibt sogar keinen * nix Weg. Es gibt nur Linux Weg.

Unter Linux sind alle relevanten Informationen in verschiedenen Dateien im /proc Dateisystem verfügbar. Das /proc/devices wird Ihnen sagen, welche Geräte es gibt (die Dateien in /dev/ können auch dann existieren, wenn die Geräte nicht verfügbar sind, obwohl das Öffnen in diesem Fall fehlschlägt).% Co_de% teilt Ihnen mit, welche Partitionen auf jedem verfügbar sind Festplatte und dann müssen Sie in den verschiedenen Unterverzeichnissen nach den Informationen suchen. Schauen Sie sich einfach auf einem Linux-System um, wo es ist, was Sie brauchen.

    
Jan Hudec 04.03.2011 12:26
quelle
2

Für GNU / Linux sehen Sie sich dies an: Festplatten-Metadaten erhalten

    
fpmurphy1 04.03.2011 18:16
quelle
2
%Vor%     
Amit Vujic 20.09.2016 16:05
quelle
1
%Vor%     
Amit Vujic 16.09.2016 15:59
quelle

Tags und Links