2010-03-22 69 views
2

我需要讀取C++中CPU/RAM /磁盤使用情況等系統信息。也許交換,網絡和過程,但這不是那麼重要。如何在Windows和Linux上讀取C++中的系統信息?

它可能已經完成了一千次,所以我第一次嘗試搜索一個庫。有人建議hereSIGAR,這似乎符合我的需求,但它有一個GPL許可證,它是包含在一個專有產品。所以這不是一個選擇。

我覺得這不是那麼容易實現,因爲它需要在多個平臺上進行測試。所以圖書館會受到歡迎。

如果你不知道任何圖書館,你能否指出我在兩個平臺的正確方向?

+0

這兩個平臺... Linux和Mac? :-) – Nate 2010-03-22 23:53:31

+0

windows和linux,它的標題是 – 2010-03-22 23:57:25

回答

0

簡短的回答是推出自己的實現並不困難。

有關更完整的答案,請參閱QT論壇上的以下主題。這是從2006年,但我認爲它解決你的問題:

http://lists.trolltech.com/qt-interest/2006-05/thread00922-0.html

UPDATE:

你可以嘗試:

#if defined(WINDOWS) 
    // either macro format 
    #define CPU_INFO (<your cpu macro>) 
    // or function format 
    void fs_info() 
    ... 
#elif defined(LINXU) 
    ... 
#elif defined(MAC) 
    ... 
#endif 

,然後在你的代碼中使用這些宏/函數。

我敢肯定,有一種方法可以創建一個基於C++模板的解決方案,它會比上面的C混亂更乾淨。

+0

thx這個鏈接,但是他們似乎談論的是cpu數不使用,也不是ram和文件系統的使用。我特別感興趣的最後一個實際上(文件​​系統) – 2010-03-23 00:30:58

+0

我給了鏈接作爲檢測多個操作系統的一個例子。 您可以嘗試將SIGAR捲入您自己的自定義動態庫,這將是GPL,然後將其與您的專有代碼一起使用。我聽說過這種方法用於專有的Linux驅動程序,但我不知道法律後果是什麼。 – 2010-03-25 22:12:36

+0

我懷疑這是合法的。這句話來自gnu.org:「使用較小的GPL允許在專有程序中使用該庫;將普通的GPL用於一個庫使得它僅適用於免費程序。」和來自維基百科:「GPL與LGPL之間的主要區別在於後者可以與非(L)GPLed程序相關聯(在一個庫的情況下,'由'使用),無論它是否是免費的軟件或專有軟件「。 – 2010-03-25 22:40:32

3

在Windows上,嘗試GetDiskFreeSpaceExGlobalMemoryStatusEx

由於它允許您掛接卷的方式,Linux有點複雜。你總是可以system()出來「df」,但這很可怕。由於Linux是開源的,只需查看「df」的源代碼即可瞭解它的工作原理! :)

如果您沒有時間:對於UNIX變體(包括Linux),您可以嘗試libstatgrab。這是LGPL /專有友好。您可能需要專門針對Windows的#ifdef某些代碼,但幸運的是,Windows調用非常簡單。最差情況:200行。如果你感覺慷慨,你可以貢獻一個全面支持Windows的補丁:)

祝你好運!

+0

看起來有趣我會看看;) – 2010-03-23 08:59:21

+0

快速的問題:比方說,我決定使用(非常髒)的系統(「DF」)的方式。我如何捕獲結果? – 2010-03-25 22:24:11

+0

我的意思是'popen()'。以下內容將返回每個安裝點的可用空間(第四列,條形標題)。解析返回的字符串&add/sum:'df | awk'{if(NR> 1){print $ 4}}''(awk在添加大量數據時可能會遇到問題)。 – pestilence669 2010-03-26 22:10:15

相關問題