【问题标题】:How do I read system information in C++?如何在 C++ 中读取系统信息?
【发布时间】:2010-09-25 09:22:17
【问题描述】:

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

【问题讨论】:

    标签: c++ linux operating-system system


    【解决方案1】:

    如果您通过系统使用 *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 的信息。

    【讨论】:

    • 如果你能处理噪音,你也可以strace一个现有的系统程序(应用程序)。例如。 “strace uname -a” 这将显示该程序进行的所有系统调用。找到正确的系统调用,您就可以从自己的程序中调用相同的例程。
    • 你不知道我有多高兴我不必解析 system("df") 的输出。非常感谢。 :)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-02
          • 2014-06-12
          • 2010-10-02
          • 1970-01-01
          • 2016-03-12
          • 2011-06-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多