获取系统内核信息

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

  1. $ uname -a
  2. 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. #include <stdio.h>
  2. #include <sys/utsname.h>
  3. int main(int argc, char *argv[])
  4. {
  5. struct utsname utsname;
  6. int rv = uname(&utsname);
  7. if (rv == -1) {
  8. perror("uname");
  9. return 1;
  10. }
  11. printf("sysname: %s\n", utsname.sysname);
  12. printf("nodename: %s\n", utsname.nodename);
  13. printf("release: %s\n", utsname.release);
  14. printf("version: %s\n", utsname.version);
  15. printf("machine: %s\n", utsname.machine);
  16. #ifdef _GNU_SOURCE
  17. printf("dnsdomainname: %s\n", utsname.domainname);
  18. #endif
  19. return 0;
  20. }

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

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

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

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

下一步

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

../../_images/wechat-mp-qrcode.png小菜学编程

参考文献