获取系统内核信息

通过 uname ,可以获取当前操作系统相关信息:

$ uname -a
Linux ant.x.fasionchan.com 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

命令展示的信息包括:

  • 操作系统名
  • 机器名
  • 操作系统发布号
  • 操作系统版本
  • 处理器体系结构
  • etc

命令通过同名系统调用获得信息, uname 系统调用非常简单,一个例子足以说明用法:

uname.c
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <sys/utsname.h>


int main(int argc, char *argv[])
{
    struct utsname utsname;

    int rv = uname(&utsname);
    if (rv == -1) {
        perror("uname");
        return 1;
    }

    printf("sysname: %s\n", utsname.sysname);
    printf("nodename: %s\n", utsname.nodename);
    printf("release: %s\n", utsname.release);
    printf("version: %s\n", utsname.version);
    printf("machine: %s\n", utsname.machine);
#ifdef _GNU_SOURCE
    printf("dnsdomainname: %s\n", utsname.domainname);
#endif

    return 0;
}

9 行,调用 uname 需要传入一个 utsname 类型结构体,内核为其填写相关字段。 结构体定义如下:

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

结构体字段都是字符串类型,解释如下:

  • sysname ,操作系统名(内核类型)
  • nodename ,节点名(即机器名)
  • release ,操作系统发布号(内核版本号)
  • version ,操作系统版本(发行版信息)
  • machine ,机型(处理器体系结构)

下一步

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../../_images/wechat-mp-qrcode.png

小菜学编程