Как читать системную информацию в C ++ в Windows и Linux? - PullRequest
2 голосов
/ 23 марта 2010

Мне нужно прочитать системную информацию, такую ​​как использование CPU / RAM / дисков в C ++. Может быть, обмен, сеть и процесс тоже, но это менее важно.

Вероятно, это было сделано тысячу раз раньше, поэтому я сначала попытался найти библиотеку. Кто-то здесь предложил SIGAR , который, кажется, соответствует моим потребностям, но имеет лицензию GPL и предназначен для включения в проприетарный продукт. Так что это не вариант здесь.

Я чувствую, что это что-то не так легко реализовать, так как оно потребует тестирования на нескольких платформах. Так что библиотека будет приветствоваться.

Если вы не знаете ни одной библиотеки, не могли бы вы указать мне правильное направление для обеих платформ?

Ответы [ 3 ]

3 голосов
/ 23 марта 2010

В Windows попробуйте GetDiskFreeSpaceEx и GlobalMemoryStatusEx .

Linux немного сложнее, поскольку позволяет монтировать тома.Вы всегда можете system() выйти на "df", но это ужасно.Поскольку Linux является открытым исходным кодом, просто посмотрите на исходный код «df», чтобы узнать, как он работает!:)

Если у вас нет времени: для вариантов UNIX (включая Linux) вы можете попробовать libstatgrab .Это LGPL / патентованный.Возможно, вам понадобится #ifdef некоторый код специально для Windows, но, к счастью, вызовы Windows просты.В худшем случае: 200 строк.Если вы чувствуете себя щедрым, вы можете добавить патч для полноценной поддержки Windows:)

Удачи!

0 голосов
/ 23 марта 2010

Лучше всего создать что-то самостоятельно.

В 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/

0 голосов
/ 23 марта 2010

Краткий ответ: не очень сложно свернуть собственную реализацию.

Для более полного ответа посмотрите следующую тему на форуме 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 выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...