如何查询系统功能/属性?

时间:2011-06-18 14:47:13

标签: c++ c linux system

我想编写一个能够打印出系统属性的程序。这可能吗?

如果是这样,使用C / C ++,如何学习系统特性/属性?

例如,以下属性:

 hardware :
 Memory 3.8 gib
 ubuntu   :
 release 10.10 ( maveric )
 system status:
 available disk space 51.1 gib
 user name  :
 xxx
 processor :
 intel ... duo cpu e4600

该平台是Linux。

3 个答案:

答案 0 :(得分:3)

在Linux中您可以简单地使用该功能:

int uname(struct utsname *buf);

包含标题

#include <sys/utsname.h>

它将系统信息作为结构的一部分返回:

struct utsname 
   {
       char sysname[];    /* Operating system name (e.g., "Linux") */
       char nodename[];   /* Name within "some implementation-defined network" */
       char release[];    /* OS release (e.g., "2.6.28") */
       char version[];    /* OS version */
       char machine[];    /* Hardware identifier */
       #ifdef _GNU_SOURCE
       char domainname[]; /* NIS or YP domain name */
       #endif
   };

好吧,如果不是全部,至少它会给你一些system properties。应该有其他api可以显示您需要的所有信息。您需要查看文档和&amp;为此搜索一下。

修改

哦,好吧,我刚从互联网上撕下这一个。该程序将帮助您以编程方式运行Linux命令。

char* GetSystemOutput(char* cmd)
{
    int buff_size = 32;
    char* buff = new char[buff_size];

    char* ret = NULL;
    string str = "";

    int fd[2];
    int old_fd[3];
    pipe(fd);

    old_fd[0] = dup(STDIN_FILENO);
    old_fd[1] = dup(STDOUT_FILENO);
    old_fd[2] = dup(STDERR_FILENO);

    int pid = fork();
    switch(pid)
    {
        case 0:
               close(fd[0]);
               close(STDOUT_FILENO);
               close(STDERR_FILENO);
               dup2(fd[1], STDOUT_FILENO);
               dup2(fd[1], STDERR_FILENO);
               system(cmd);
               //execlp((const char*)cmd, cmd,0);
               close (fd[1]);
               exit(0);
               break;
        case -1:
               cerr << "GetSystemOutput/fork() error\n" << endl;
               exit(1);
        default:
               close(fd[1]);
               dup2(fd[0], STDIN_FILENO);

               int rc = 1;
               while (rc > 0)
               {
                   rc = read(fd[0], buff, buff_size);
                   str.append(buff, rc);
                   //memset(buff, 0, buff_size);
               }

               ret = new char [strlen((char*)str.c_str())];

               strcpy(ret, (char*)str.c_str());

               waitpid(pid, NULL, 0);
               close(fd[0]);
    }

    dup2(STDIN_FILENO, old_fd[0]);
    dup2(STDOUT_FILENO, old_fd[1]);
    dup2(STDERR_FILENO, old_fd[2]);

    return ret;
}

Api用法:GetSystemOutput("/usr/bin/lsb_release -a")

按照命令:

cat /proc/cpuinfo = tells you cpu info
cat /proc/meminfo = tells you memory info
lspci = tells you hardware that is attached (at least if the kernel recognizes it) 
cat /proc/ide/hda/* = tells you info of your first ide hard-drive. 

答案 1 :(得分:2)

在/ proc目录中查看。有很多东西可能被视为系统属性,但您很快就能确定您感兴趣的属性。

cat /proc/somedir/somefile

是您要用于安全浏览/ proc的命令。

答案 2 :(得分:0)

每个操作系统都有一个允许您与之通信的API。

可悲的是,这不是统一的,你需要阅读搜索目标操作系统的API。

通过API,您通常可以获得所需的大部分信息。