8

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

4

4 回答 4

12

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

于 2008-12-04T18:26:11.973 回答
5

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

于 2008-12-04T18:24:38.310 回答
2

如果您不想按照 litb 的建议使用HAL ,则可以直接从/proc 文件系统中读取内容,前提是它在您的系统上。这不是最独立于平台的做事方式,在许多情况下,您需要进行一些解析来分离文件。

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

于 2008-12-04T18:52:05.180 回答
2

System information is by definition not portable, so there is no standard solution. Your best bet is using a library that does most of the work for you. One such cross platform library (unlike hal, which is currently Linux specific) is SIGAR API, which is open source BTW. I've used it in a C++ project without much trouble (the installation is a bit non-standard but can be figured out easily)

于 2008-12-05T08:35:41.400 回答