我需要讀取C++中CPU/RAM /磁盤使用情況等系統信息。也許交換,網絡和過程,但這不是那麼重要。如何在Windows和Linux上讀取C++中的系統信息?
它可能已經完成了一千次,所以我第一次嘗試搜索一個庫。有人建議hereSIGAR,這似乎符合我的需求,但它有一個GPL許可證,它是包含在一個專有產品。所以這不是一個選擇。
我覺得這不是那麼容易實現,因爲它需要在多個平臺上進行測試。所以圖書館會受到歡迎。
如果你不知道任何圖書館,你能否指出我在兩個平臺的正確方向?
我需要讀取C++中CPU/RAM /磁盤使用情況等系統信息。也許交換,網絡和過程,但這不是那麼重要。如何在Windows和Linux上讀取C++中的系統信息?
它可能已經完成了一千次,所以我第一次嘗試搜索一個庫。有人建議hereSIGAR,這似乎符合我的需求,但它有一個GPL許可證,它是包含在一個專有產品。所以這不是一個選擇。
我覺得這不是那麼容易實現,因爲它需要在多個平臺上進行測試。所以圖書館會受到歡迎。
如果你不知道任何圖書館,你能否指出我在兩個平臺的正確方向?
簡短的回答是推出自己的實現並不困難。
有關更完整的答案,請參閱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混亂更乾淨。
thx這個鏈接,但是他們似乎談論的是cpu數不使用,也不是ram和文件系統的使用。我特別感興趣的最後一個實際上(文件系統) – 2010-03-23 00:30:58
我給了鏈接作爲檢測多個操作系統的一個例子。 您可以嘗試將SIGAR捲入您自己的自定義動態庫,這將是GPL,然後將其與您的專有代碼一起使用。我聽說過這種方法用於專有的Linux驅動程序,但我不知道法律後果是什麼。 – 2010-03-25 22:12:36
我懷疑這是合法的。這句話來自gnu.org:「使用較小的GPL允許在專有程序中使用該庫;將普通的GPL用於一個庫使得它僅適用於免費程序。」和來自維基百科:「GPL與LGPL之間的主要區別在於後者可以與非(L)GPLed程序相關聯(在一個庫的情況下,'由'使用),無論它是否是免費的軟件或專有軟件「。 – 2010-03-25 22:40:32
在Windows上,嘗試GetDiskFreeSpaceEx和GlobalMemoryStatusEx。
由於它允許您掛接卷的方式,Linux有點複雜。你總是可以system()
出來「df」,但這很可怕。由於Linux是開源的,只需查看「df」的源代碼即可瞭解它的工作原理! :)
如果您沒有時間:對於UNIX變體(包括Linux),您可以嘗試libstatgrab。這是LGPL /專有友好。您可能需要專門針對Windows的#ifdef
某些代碼,但幸運的是,Windows調用非常簡單。最差情況:200行。如果你感覺慷慨,你可以貢獻一個全面支持Windows的補丁:)
祝你好運!
看起來有趣我會看看;) – 2010-03-23 08:59:21
快速的問題:比方說,我決定使用(非常髒)的系統(「DF」)的方式。我如何捕獲結果? – 2010-03-25 22:24:11
我的意思是'popen()'。以下內容將返回每個安裝點的可用空間(第四列,條形標題)。解析返回的字符串&add/sum:'df | awk'{if(NR> 1){print $ 4}}''(awk在添加大量數據時可能會遇到問題)。 – pestilence669 2010-03-26 22:10:15
這兩個平臺... Linux和Mac? :-) – Nate 2010-03-22 23:53:31
windows和linux,它的標題是 – 2010-03-22 23:57:25