如何在Windows和Linux上读取C ++中的系统信息?

时间:2010-03-22 23:51:08

标签: c++ windows linux

我需要读取系统信息,如C ++中的CPU / RAM /磁盘使用情况。也许是交换,网络和流程,但这不太重要。

之前可能已经完成了数千次,所以我第一次尝试搜索图书馆。有人here建议SIGAR,这似乎符合我的需求,但它有GPL许可证,并且包含在专有产品中。所以这不是一个选择。

我觉得这不容易实现,因为它需要在多个平台上进行测试。所以欢迎图书馆。

如果你不知道任何图书馆,你能指出我在两个平台上的正确方向吗?

3 个答案:

答案 0 :(得分:3)

在Windows上,尝试GetDiskFreeSpaceExGlobalMemoryStatusEx

由于它允许你安装卷的方式,Linux有点复杂。你可以随时system()向“df”,但这很可怕。由于Linux是开源的,只需查看源代码“df”就可以了解它是如何工作的! :)

如果您没有时间:对于UNIX变体(包括Linux),您可以尝试libstatgrab。这是LGPL /专有友好。您可能需要#ifdef专门针对Windows的一些代码,但幸运的是,Windows调用很简单。最坏的情况:200行。如果你感觉很慷慨,你可以为全面的Windows支持提供补丁:)

祝你好运!

答案 1 :(得分:0)

简短的回答是推出自己的实施并不是很困难。

有关更完整的答案,请查看QT论坛上的以下主题。这是从2006年开始,但我认为它解决了你的问题:

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

更新:

你可以尝试:

#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语言更清洁。

答案 2 :(得分:0)

你最好的选择是自己创造一些东西。

在Windows上,你会看到类似这样的内容:http://www.codeproject.com/KB/system/Using_WMI_in_Visual_C__.aspx并且:http://www.philosophicalgeek.com/2009/01/03/determine-cpu-usage-of-current-process-c-and-c/