我試圖獲取諸如操作系統版本,硬盤空間,可用磁盤空間以及在C++中的Linux系統上安裝的RAM等信息。我知道我可以使用system()
來運行不同的Linux命令並捕獲它們的輸出(這正是我目前正在做的),但我想知道是否有更好的方法? C++標準庫中是否存在可用於從操作系統獲取信息的內容?如何讀取C++中的系統信息?
8
A
回答
12
如果您通過系統使用* nix命令。
然後做人滾動到手冊頁的底部,它通常會顯示相關的C系統調用相關的。
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
所以,如果你使用系統(「uname」)。從手冊頁你可以看到還有一個uname C系統調用(uname(2))。所以你現在可以做一個'man 2 uname'來獲取關於如何使用C系統調用uname的信息。
5
C++標準庫中沒有任何內容用於這些目的。您可以使用的庫是libhal
,它將程序視圖提取到硬件,從/proc
,/sys
等收集各種信息。向下滾動,似乎也有一個非官方的C++綁定可用(雖然還沒有測試過,儘管libhal對C++程序也適用)。使用命令lshal
顯示HAL可用的所有設備信息。
2
如果您不想使用HAL作爲litb建議,那麼您可以直接從/proc filesystem中讀取事項,只要它位於系統中即可。這不是平臺最獨立的做事方式,在很多情況下,您需要做一些解析來挑選文件。
我認爲HAL爲你抽象了很多這些細節,但只要知道你可以直接從/ proc讀取它,如果使用庫不是一個選項。
2
系統信息根據定義是不可移植的,所以沒有標準的解決方案。你最好的選擇是使用一個爲你完成大部分工作的庫。一個這樣的跨平臺庫(不同於目前特定於Linux的hal)是SIGAR API,它是開源的BTW。我已經在C++項目中使用它,沒有太多的麻煩(安裝有點不標準,但可以很容易地計算出來)
相關問題
- 1. 如何在Windows和Linux上讀取C++中的系統信息?
- 2. 使用c獲取系統信息#
- 3. 使用c獲取系統信息#
- 4. 如何在OS X上使用Python讀取系統信息?
- 5. 我如何在PHP中獲取系統統計信息
- 6. 信息系統
- 7. 如何通過C庫獲取Linux硬件和系統信息?
- 8. 如何獲得訪客帳戶c#中的系統信息?
- 9. Linux系統監視器如何獲取進程統計信息
- 10. 如何使用node.js獲取系統統計信息
- 11. 的Qt - 獲取系統信息
- 12. 從單個系統信息庫讀取代碼的令牌
- 13. 如何在iOS系統下獲取objective-c中的所有進程信息?
- 14. 如何在visual C++中顯示系統信息?
- 15. 如何在VB.NET 4.0中獲取系統硬件信息
- 16. android:讀取特定的聯繫信息
- 17. 如何解讀Storm UI統計信息
- 18. 文件系統信息 - 如何查詢?
- 19. 在任何地圖Api中獲取地理信息系統的街道/道路地理信息系統
- 20. 用Postgresql獲取系統操作信息
- 21. 從julia獲取系統內存信息
- 22. 使用Reg Query獲取系統信息
- 23. 獲取系統帳戶信息java?
- 24. 獲取WMI不返回的系統信息 - C#
- 25. 如何獲取有關磁盤文件系統的信息?
- 26. 如何獲取Linux系統上的內存信息?
- 27. 如何獲取有關係統視圖索引的信息
- 28. C++從圖像中讀取信息
- 29. 在C#.NET中讀取SQLite表信息
- 30. 如何在Rails中讀取POST信息?
如果可以處理噪聲,也可以對現有的系統程序(應用程序)進行strace。例如。 「strace uname -a」這顯示了該程序所做的所有系統調用。找到正確的系統調用,並且可以從自己的程序調用相同的例程。 – 2008-12-04 19:10:46