首页 > 其他分享 >应用层获取内核版本号

应用层获取内核版本号

时间:2023-04-14 11:36:59浏览次数:34  
标签:struct 版本号 char uname 内核 release include kernelVersionBuffer 应用层

应用层获取内核版本号

1. man 2 uname

$ man 2 uname
UNAME(2)                               Linux Programmer's Manual                              UNAME(2)

NAME
       uname - get name and information about current kernel

SYNOPSIS
       #include <sys/utsname.h>

       int uname(struct utsname *buf);

DESCRIPTION
       uname()  returns  system information in the structure pointed to by buf.  The utsname struct is
       defined in <sys/utsname.h>:

           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
           };

       The length of the arrays in a struct utsname is unspecified (see NOTES); the fields are  termi‐
       nated by a null byte ('\0').

RETURN VALUE
       On success, zero is returned.  On error, -1 is returned, and errno is set appropriately.

2. sample

#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/utsname.h>

int main(int argc, char **argv)
{

        struct utsname kernelVersionBuffer;
        //memset(&kernelVersionBuffer, 0, sizeof(kernelVersionBuffer));
        int ret = uname(&kernelVersionBuffer);
        if(ret < 0)
        {
                printf("errno:%d errMsg:%s\n", errno, strerror(errno));
                return -1;
        }

        printf(" sysName:%s\n nodeName:%s\n release:%s\n version:%s\n machine:%s\n domainName:%s\n", \
                kernelVersionBuffer.sysname,\
                kernelVersionBuffer.nodename,\
                kernelVersionBuffer.release,\
                kernelVersionBuffer.version,\
                kernelVersionBuffer.machine,\
                kernelVersionBuffer.domainname);

        return 0;
}

3. compile

$ gcc kernelVersion.c -o getKernelVersion

4. out

$ ./getKernelVersion
 sysName:Linux
 nodeName:ubuntu
 release:4.15.0-142-generic
 version:#146~16.04.1-Ubuntu SMP Tue Apr 13 09:27:15 UTC 2021
 machine:x86_64
 domainName:(none)
  
$ uname -a
Linux ubuntu 4.15.0-142-generic #146~16.04.1-Ubuntu SMP Tue Apr 13 09:27:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

标签:struct,版本号,char,uname,内核,release,include,kernelVersionBuffer,应用层
From: https://www.cnblogs.com/zhijun1996/p/17317775.html

相关文章

  • linux设备树-linux内核设备树移植(二)
    ----------------------------------------------------------------------------------------------------------------------------内核版本:linux5.2.8根文件系统:busybox1.25.0u-boot:2016.05-------------------------------------------------------------------------------......
  • android: minSdkVersion、targetSdkVersion、CompileSdkVersion三个api版本号的区别
    一,minSdkVersion:   app可以安装的最低的api版本:   1,安装:googleplay和应用市场会根据用户的api版本,           判断用户是否可以看到你的app    2, 运行:在minSdkVersion指定版本的api上运行时,           ......
  • ARM平台内核的编译
    目的:在Ubuntu上编译出树莓派的内核。由于linux内核非常庞大,大约有1.4w个c文件,一千多万行代码,但是linux内核编译出来才才几M,这是为什么呢?因为linux是开源的,支持多平台、多架构。所以里面包含了很多平台的代码。我们现在要的是树莓派这个平台上的内核,所以其他的平台......
  • linux操作系统和linux内核
    linux内核并非操作系统,是操作系统的基本,负责对计算机硬件进行管理,并且提供了使用这些硬件资源的通用接口。主要管理如下几个方面:1. 内存管理:追踪记录有多少内存存储了什么以及存储在哪里2. 进程管理:其实就是对cpu的管理,即确定哪些进程可以使用中央处理器......
  • 应用层
    C/S模型  P2P模型  DNS域名解析服务器1.递归查询:顶级域名->权限域名->本地域名2.迭代查询顶级域名<-权限域名<-本地域名 文件传输系统FTP:    HTTP协议万维网(WWW)以C/S方式工作,用户使用的浏览器就是万维网客户程序,万维网啊文档所驻留的主机运行服务器......
  • Autosar系列之Autosar应用层整体入门
    文章目录一、整个功能示意图二、软件组件SWC分类三、SWC组件:ports1.发送-接收端口Sender-Receiver2.客户端-服务端端口Client-Server四、可运行实体Runnables五、BSW1.微控制器抽象层MicrocontrollerAbstractionLayer2.ECU抽象层ECUAbstractionLayer六、服务层ServiceLayer七......
  • [网络]应用层协议:HTTP / HTTPS
    1HTTP/HTTPS概述2HTTP/22.1HTTP/2辉煌不在?虽然HTTP/2标准在2015年5月就以RFC7540正式发表了,并且多数浏览器在2015年底就支持了。但是,真正被广泛使用起来要到2018年左右,但是也是在2018年,11月IETF给出了官方批准,认可HTTP-over-QUIC成为HTTP/3。2018年的时候,我写过一篇......
  • ubuntu因为升级自动更新内核而重启无法进入图形界面问题解决
    ubuntu因为升级自动更新内核而重启无法进入图形界面问题解决。我使用的ubuntu版本是22.04LTS。经常因为系统更新软件而自动更新内核,又因为我的PC上安装了NVIDIA的显卡,这个卡对应的驱动是NVIDIA-Linux-x86_64-525.89.02.run。这个驱动要从官网上下载安装,而ubuntu系统自带的驱动是......
  • 【转载】深入剖析三维几何内核(1)--基础
    转载深入剖析三维几何内核(1)--基础本文将对几何内核涉及的专业术语,设计理念,应用领域,以及现状做进一步的介绍。-------------------------------------------计算机中表示三维形体的模型,按照几何特点进行分类,大体上可以分为三种:线框模型、表面模型和实体模型。如果按照表示物......
  • Linux内核设备驱动设备树概念与使用
    一、设备树概念以及作用1.1设备树概念设备树(DeviceTree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做DTS(DeviceTreeSource),这个DTS文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU数量、内存基地址、IIC接口上接了哪些设备、SPI接口上接了......