2008-12-04 47 views
8

我試圖獲取諸如操作系統版本,硬盤空間,可用磁盤空間以及在C++中的Linux系統上安裝的RAM等信息。我知道我可以使用system()來運行不同的Linux命令並捕獲它們的輸出(這正是我目前正在做的),但我想知道是否有更好的方法? C++標準庫中是否存在可用於從操作系統獲取信息的內容?如何讀取C++中的系統信息?

回答

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的信息。

+2

如果可以處理噪聲,也可以對現有的系統程序(應用程序)進行strace。例如。 「strace uname -a」這顯示了該程序所做的所有系統調用。找到正確的系統調用,並且可以從自己的程序調用相同的例程。 – 2008-12-04 19:10:46

5

C++標準庫中沒有任何內容用於這些目的。您可以使用的庫是libhal,它將程序視圖提取到硬件,從/proc,/sys等收集各種信息。向下滾動,似乎也有一個非官方的C++綁定可用(雖然還沒有測試過,儘管libhal對C++程序也適用)。使用命令lshal顯示HAL可用的所有設備信息。

2

如果您不想使用HAL作爲litb建議,那麼您可以直接從/proc filesystem中讀取事項,只要它位於系統中即可。這不是平臺最獨立的做事方式,在很多情況下,您需要做一些解析來挑選文件。

我認爲HAL爲你抽象了很多這些細節,但只要知道你可以直接從/ proc讀取它,如果使用庫不是一個選項。

2

系統信息根據定義是不可移植的,所以沒有標準的解決方案。你最好的選擇是使用一個爲你完成大部分工作的庫。一個這樣的跨平臺庫(不同於目前特定於Linux的hal)是SIGAR API,它是開源的BTW。我已經在C++項目中使用它,沒有太多的麻煩(安裝有點不標準,但可以很容易地計算出來)