【发布时间】:2010-09-25 09:22:17
【问题描述】:
我正在尝试获取诸如操作系统版本、硬盘空间、可用磁盘空间以及在 C++ 中的 Linux 系统上安装的 RAM 等信息。我知道我可以使用system() 来运行不同的 Linux 命令并捕获它们的输出(这是我目前正在做的)但我想知道是否有更好的方法? C++ 标准库中有什么东西可以用来从操作系统获取信息吗?
【问题讨论】:
标签: c++ linux operating-system system
我正在尝试获取诸如操作系统版本、硬盘空间、可用磁盘空间以及在 C++ 中的 Linux 系统上安装的 RAM 等信息。我知道我可以使用system() 来运行不同的 Linux 命令并捕获它们的输出(这是我目前正在做的)但我想知道是否有更好的方法? C++ 标准库中有什么东西可以用来从操作系统获取信息吗?
【问题讨论】:
标签: c++ linux operating-system system
如果您通过系统使用 *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
因此,如果您使用的是 system("uname").从手册页中您可以看到还有一个 uname C 系统调用 (uname(2))。因此,您现在可以执行“man 2 uname”来获取有关如何使用 C 系统调用 uname 的信息。
【讨论】:
C++ 标准库中没有用于这些目的的任何内容。你可以使用的库是libhal,它将程序的视图抽象到硬件上,收集来自/proc、/sys等的各种信息。 HAL,向下滚动,似乎也有一个非官方的 C++ 绑定可用(虽然还没有测试过,而 libhal 也适用于 C++ 程序)。使用命令lshal 显示HAL 可用的所有设备信息。
【讨论】:
如果您不想像 litb 建议的那样使用 HAL,您可以直接从 /proc filesystem 中读取内容,前提是它在您的系统上。这不是最独立于平台的做事方式,在许多情况下,您需要进行一些解析来分离文件。
我认为 HAL 为您抽象了很多这些细节,但只要知道如果不能使用库,您可以直接从 /proc 读取它。
【讨论】:
根据定义,系统信息不可移植,因此没有标准解决方案。你最好的选择是使用一个为你完成大部分工作的库。 SIGAR API 是一个这样的跨平台库(与当前特定于 Linux 的 hal 不同),它是开源 BTW。我在一个C++项目中使用过,没有太多麻烦(安装有点不标准,但很容易搞定)
【讨论】: