Frage

Ich versuche, Informationen wie OS-Version, Festplattenspeicher, Plattenspeicher und RAM installiert auf einem Linux-System in C ++ zu erhalten. Ich weiß, ich system() können verschiedene Linux-Befehle und erfassen deren Ausgang laufen (das ist, was ich derzeit tue), aber ich habe mich gefragt, ob es einen besseren Weg? Gibt es etwas in der Standardbibliothek C ++, die ich verwenden kann, Informationen aus dem Betriebssystem zu bekommen?

War es hilfreich?

Lösung

Wenn Sie mit * nix-Befehle über das System.

Dann tut Mann Blätter zum Boden der Mannes Seite und es wird Ihnen in der Regel zeigen, was relevant C Systemaufrufe zusammen.

Example:  man uname:
SEE ALSO
       uname(2), getdomainname(2), gethostname(2)


Explanation of numbers:

(1): User UNIX Command
(2): Unix and C system calls
(3): C Library routines
(4): Special file names
(5): File formats
(6): 
(7):
(8): System admin commands

Wenn Sie also System verwenden ( "uname"). Aus der Manpage können Sie sehen, dass es auch ein uname C Systemaufruf (uname (2)). So können Sie jetzt ein ‚Mann 2 uname‘ tun Informationen darüber zu bekommen, wie den C-Systemaufruf uname verwenden.

Andere Tipps

Es gibt nichts in der Standardbibliothek C ++ für diese Zwecke. Die Bibliothek, die Sie verwenden können, ist libhal, die den Blick von Programmen auf die Hardware abstrahiert, verschiedene Informationen von /proc, /sys und andere zu sammeln. HAL , nach unten scrollen, scheint es eine inoffizielle C ++ Bindung zur Verfügung zu (haven‘zu sein t getestet es aber, während libhal für C auch gut funktioniert ++ Programme). Verwenden Sie den Befehl lshal alle Geräteinformationen zu HAL verfügbar angezeigt werden soll.

Wenn Sie nicht wollen, HAL als litb schon sagt, können Sie lesen Sie die Dinge gerade aus dem / proc-Dateisystem , vorausgesetzt, es ist es auf Ihrem System. Dies ist nicht die plattformunabhängige Art und Weise, Dinge zu tun, und in vielen Fällen werden Sie ein wenig Parsing tun müssen, um die Dateien zerpflücken.

Ich denke, HAL viele dieser Details für Sie abstrahiert, sondern weiß nur, dass man es direkt aus / proc lesen kann, wenn eine Bibliothek keine Option ist.

Systeminformationen sind definitionsgemäß nicht tragbar, so dass es keine Standardlösung. Ihre beste Wette wird mit einer Bibliothek, die die meiste Arbeit für Sie erledigt. Eine solche Cross-Plattform-Bibliothek (im Gegensatz zu hal, die derzeit Linux-spezifisch) ist SIGAR API , die BTW Open Source. Ich habe es in einem C ++ Projekt ohne viel Mühe verwendet (die Installation ist ein bisschen Nicht-Standard, kann aber leicht herausgefunden werden)

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