Ich versuche, Informationen wie OS-Version, Festplattenspeicher, Plattenspeicher und RAM installiert auf einem Linux-System in C++ zu erhalten. Ich weiß, dass ich system()
verwenden kann, um verschiedene Linux-Befehle auszuführen und ihre Ausgabe zu erfassen (was ich gerade mache), aber ich frage mich, ob es einen besseren Weg gibt? Gibt es in der C++ - Standardbibliothek etwas, mit dem ich Informationen vom Betriebssystem abrufen kann?Wie lese ich Systeminformationen in C++?
Antwort
Wenn Sie mit * nix-Befehle über das System.
tun Dann Mann Blättern zum Boden des Mannes Seite und es wird in der Regel zeigen Ihnen, was relevant C Systemaufrufe bezogen.
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
Also, wenn Sie System verwenden ("uname"). Auf der man-Seite können Sie sehen, dass es auch einen uname C-Systemaufruf gibt (uname (2)). Sie können nun einen 'man 2 uname' ausführen, um Informationen darüber zu erhalten, wie der C-Systemaufruf uname verwendet wird.
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, scrollen Sie nach unten, es scheint auch eine inoffizielle C++ - Bindung zu geben (habe sie aber nicht getestet, während libhal auch für C++ - Programme funktioniert). Verwenden Sie den Befehl lshal
, um alle für HAL verfügbaren Geräteinformationen anzuzeigen.
Wenn Sie nicht HAL verwenden möchten, wie Litb suggeriert, können Sie Dinge direkt aus der /proc filesystem lesen, sofern es auf Ihrem System vorhanden ist. Dies ist nicht der plattformunabhängigste Weg, und in vielen Fällen müssen Sie ein wenig analysieren, um die Dateien auseinander zu nehmen.
Ich denke, HAL abstrahiert viele dieser Details für Sie, aber wissen Sie, dass Sie es direkt aus/proc lesen können, wenn Sie eine Bibliothek verwenden, ist keine Option.
Systeminformationen sind definitionsgemäß nicht tragbar, so dass es keine Standardlösung. Am besten verwenden Sie eine Bibliothek, die die meiste Arbeit für Sie erledigt. Eine solche plattformübergreifende Bibliothek (im Gegensatz zu hal, die derzeit Linux-spezifisch ist) ist SIGAR API, die Open Source BTW ist. Ich habe es in einem C++ Projekt ohne viel Mühe verwendet (die Installation ist ein bisschen nicht Standard aber kann leicht herausgefunden werden)
- 1. Wie kann ich Systeminformationen in Python zurückgeben?
- 2. Wie bekomme ich Systeminformationen in PHP?
- 3. Wie lese ich XML-Datei in C#?
- 4. Wie lese ich eine Binärdatei in C#?
- 5. Wie lese ich JSON Antwort in C#
- 6. wie man Systeminformationen in OSX mit objective c sammelt
- 7. Wie lese ich C++ Pointer-Konstrukt?
- 8. Wie nützliche Systeminformationen in Java abrufen?
- 9. Systeminformationen mit DOS
- 10. Wie lese ich Leerraum mit scanf in c?
- 11. Wie lese ich Daten aus XML-String in C#
- 12. Wie lese und analysiere ich eine .dat-Datei in C?
- 13. Wie lese ich eine Zeile aus einer Datentabelle in C#?
- 14. Wie lese ich lange Zeilen aus einer Textdatei in C++?
- 15. Wie lese ich eine beliebig lange Zeile in C?
- 16. Wie lese ich aus einer Versionsressource in Visual C++
- 17. Wie lese ich eine Videokamera in einem Win32 C-Programm
- 18. Wie lese ich numpy source?
- 19. Wie lese ich formatierte Eingabe in Java?
- 20. Wie lese ich chinesische Dateien?
- 21. Wie lese ich mehrere Binärdateien in R?
- 22. Wie Sie MS Access-Systeminformationen abrufen
- 23. Lese wissenschaftliche Notation in C
- 24. Lese CSV-Datei in C++
- 25. C# Ich lese meine Eingabe nicht
- 26. Wie lese ich healthKit Herzfrequenzdaten?
- 27. Wie schreibe/lese ich Bits von/zu einem Stream? (C#)
- 28. Wie lese ich List ~ Array im Anwendungsstatus (C# ASP.net MVC)
- 29. Wie lese ich eine Binärdatei mit dem Unicode-Dateinamen C++?
- 30. Wie lese ich eine FoxPro 8.0-Datenbank von C#?
Sie können auch ein vorhandenes Systemprogramm (Anwendung) strace, wenn Sie mit dem Lärm umgehen können. Z.B. "strace uname -a" Dies zeigt Ihnen ALLE Systemaufrufe an, die von diesem Programm ausgeführt wurden. Suchen Sie den richtigen Systemaufruf, und Sie können die gleiche Routine von Ihrem eigenen Programm aufrufen. –
Sie wissen nicht, wie glücklich ich bin, dass ich die Ausgabe des Systems ("df") nicht analysieren muss. Danke vielmals. :) –