我如何读取C ++中的系统信息?

我正在尝试获取操作系统版本,硬盘空间,可用磁盘空间等信息,并在C ++的Linux系统上安装了RAM。 我知道我可以使用system()来运行不同的Linux命令并捕获它们的输出(这是我目前正在做的),但是我想知道是否有更好的方法? C ++标准库中是否有一些可用于从操作系统获取信息的东西?

如果您通过系统使用* nix命令。

然后,人滚动到手册页的底部,它通常会显示相关的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的信息。

在C ++标准库中没有这些用途。 您可以使用的库是libhal ,它将程序视图提取到硬件,从/proc/sys等收集各种信息。 HAL ,向下滚动,似乎也有一个非官方的C ++绑定可用(虽然还没有测试过,而libhal的作品也适用于C ++程序)。 使用lshal命令显示HAL可用的所有设备信息。

如果你不想使用HAL ,你可以直接从/ proc文件系统中读取它,只要它在你的系统上。 这不是平台最独立的做事方式,在很多情况下,你需要做一些解析来挑选文件。

我认为HAL为你抽象了很多这些细节,但是只要知道你可以直接从/ proc读取它,如果使用库不是一个选项。

系统信息根据定义是不可移植的,所以没有标准的解决方案。 你最好的选择是使用一个图书馆,为你做大部分的工作。 一个这样的跨平台库(不像目前Linux特有的hal)是SIGAR API ,它是开源的BTW。 我已经在一个C ++项目中使用它,没有太多的麻烦(安装有点不标准,但可以轻松搞定)