Вопрос

Я пытаюсь получить такую информацию, как версия операционной системы, место на жестком диске, доступное дисковое пространство и установленная оперативная память в системе Linux на C ++.Я знаю, что могу использовать system() запускать разные команды Linux и записывать их выходные данные (что я сейчас и делаю), но мне было интересно, есть ли лучший способ?Есть ли что-то в стандартной библиотеке C ++, что я могу использовать для получения информации из операционной системы?

Это было полезно?

Решение

Если вы используете команды * nix через систему.

Затем выполните прокрутку man до нижней части справочной страницы, и она обычно покажет вам, с какими соответствующими системными вызовами 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

Итак, если вы используете system ("uname").На странице руководства вы можете видеть, что существует также системный вызов uname C (uname(2)).Итак, теперь вы можете выполнить 'man 2 uname', чтобы получить информацию о том, как использовать системный вызов C uname.

Другие советы

В стандартной библиотеке C ++ нет ничего для этих целей.Библиотека, которую вы могли бы использовать, - это libhal, который абстрагирует представление о программах от аппаратного обеспечения, собирая различную информацию из /proc, /sys и другие. ХЭЛ, прокрутите вниз, кажется, также доступна неофициальная привязка к C ++ (хотя я ее не тестировал, хотя libhal также отлично работает для программ на C ++).Используйте команду lshal для отображения всей информации об устройстве, доступной HAL.

Если вы не хотите использовать ХЭЛ как предполагает litb, вы можете читать информацию прямо из файловая система /proc, при условии, что он есть в вашей системе.Это не самый независимый от платформы способ ведения дел, и во многих случаях вам нужно будет выполнить небольшой синтаксический анализ, чтобы выделить файлы.

Я думаю, что HAL абстрагирует многие из этих деталей для вас, но просто знайте, что вы можете прочитать это прямо из /proc, если использование библиотеки невозможно.

Системная информация по определению не переносима, поэтому стандартного решения не существует.Лучше всего использовать библиотеку, которая выполняет большую часть работы за вас.Одной из таких кроссплатформенных библиотек (в отличие от hal, которая в настоящее время специфична для Linux) является SIGAR API - интерфейс, который, кстати, имеет открытый исходный код.Я использовал его в проекте на C ++ без особых проблем (установка немного нестандартная, но ее можно легко выполнить).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top