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

时间:2008-12-04 18:18:02

标签: c++ linux operating-system system

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

4 个答案:

答案 0 :(得分:12)

如果您通过系统使用* 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”)。在手册页中,您可以看到还有一个uname C系统调用(uname(2))。因此,您现在可以执行“man 2 uname”以获取有关如何使用C系统调用uname的信息。

答案 1 :(得分:5)

C ++标准库中没有任何内容可用于这些目的。您可以使用的库是libhal,它将程序视图抽象为硬件,从/proc/sys和其他人收集各种信息。 HAL,向下滚动,似乎也有一个非官方的C ++绑定(虽然没有测试过,而libhal对C ++程序也很好)。使用命令lshal显示HAL可用的所有设备信息。

答案 2 :(得分:2)

如果您不想使用HAL作为litb建议,您可以直接从/proc filesystem读取内容,只要它在您的系统上即可。这不是最独立于平台的处理方式,在许多情况下,您需要进行一些解析来分离文件。

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

答案 3 :(得分:2)

根据定义,系统信息不可移植,因此没有标准解决方案。您最好的选择是使用一个可以完成大部分工作的库。一个这样的跨平台库(与hal不同,目前是Linux特定的)是SIGAR API,它是开源BTW。我在C ++项目中使用它没有太大麻烦(安装有点不标准但可以很容易理解)