How do I read system information in C++?

后端 未结 4 1322
谎友^
谎友^ 2021-02-04 16:29

I\'m trying to get information like OS version, hard disk space, disk space available, and installed RAM on a Linux system in C++. I know I can use system() to run

相关标签:
4条回答
  • 2021-02-04 17:09

    There is nothing in the C++ Standard library for these purposes. The library you could use is libhal, which abstracts the view of programs to the hardware, collecting various informations from /proc, /sys and others. HAL, scroll down, there seems to be an unofficial C++ binding available too (haven't tested it though, while libhal works also fine for C++ programs). Use the command lshal to display all device informations available to HAL.

    0 讨论(0)
  • 2021-02-04 17:12

    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)

    0 讨论(0)
  • 2021-02-04 17:21

    If you are using *nix commands via system.

    Then do man scroll to the bottom of the man page and it will usually show you what relevant C system calls are related.

    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
    

    So if you are using system("uname"). From the man page you can see that there is also a uname C system call (uname(2)). So you can now do a 'man 2 uname' to get information about how to use the C system call uname.

    0 讨论(0)
  • 2021-02-04 17:21

    If you don't want to use HAL as litb suggests, you can read things straight out of the /proc filesystem, provided it's there on your system. This isn't the most platform-independent way of doing things, and in many cases you'll need to do a little parsing to pick apart the files.

    I think HAL abstracts a lot of these details for you, but just know that you can read it straight from /proc if using a library isn't an option.

    0 讨论(0)
提交回复
热议问题