Как мне прочитать системную информацию в C ++? - PullRequest
8 голосов
/ 04 декабря 2008

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

Ответы [ 4 ]

12 голосов
/ 04 декабря 2008

Если вы используете * 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

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

5 голосов
/ 04 декабря 2008

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

2 голосов
/ 05 декабря 2008

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

2 голосов
/ 04 декабря 2008

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

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

...