获取系统内核信息¶
通过 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 系统调用非常简单,一个例子足以说明用法:
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 ,机型(处理器体系结构)