代码编织梦想

代码如下:

/*
 * @Description: 
 * @Version: 
 * @Autor: lishi
 * @Date: 2023-02-17 09:09:27
 * @LastEditors: lishi
 * @LastEditTime: 2023-02-17 10:18:45
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/sysinfo.h>

static int getSysIntValue(char *key)
{
    FILE *fp = NULL;
    int value = 0;
    if(key == NULL)return 0;
    
    fp = fopen(key, "r");
    if (fp == NULL) {
        printf("Error: could not open %s file\n",key);
        return 1;
    }

    fscanf(fp, "%d", &value);
    fclose(fp);fp = NULL;
    return value;
}

static int getSysStringValue(char *key,char *value,int bufLen)
{
    FILE *fp = NULL;
    int i = 0,j=0;
    char *tmp = NULL;
    if(key == NULL || value == NULL || bufLen <= 0)return 0;
    tmp = (char *)malloc(bufLen);
    if(tmp == NULL)return 0;
    memset(value,0,bufLen);
    fp = fopen(key, "r");
    if (fp == NULL) {
	    free(tmp);
	    tmp = NULL;
        printf("Error: could not open %s file\n",key);
        return 1;
    }
    fgets(tmp, bufLen, fp);
    for(i = 0;i < strlen(tmp);i++){
        if(tmp[i] != '\n' && tmp[i] != '\r'){
            value[j++] = tmp[i];
        }
    }
    fclose(fp);fp=NULL;
    free(tmp);tmp = NULL;
    return 0;
}

int main() 
{
    struct sysinfo info;
    int i = 0;
    long run_secs_total = 0;
    long run_hours = 0,run_mins = 0,run_secs = 0;
    long mem_total = 0,mem_free = 0,mem_used = 0;
    double mem_total2 = 0,mem_free2 = 0,mem_used2 = 0;
    if (sysinfo(&info) != 0) {
        printf("Error: could not get system information\n");
        return 1;
    }
    run_secs_total = info.uptime;
    run_hours = run_secs_total / 3600;
    run_mins = (run_secs_total%3600) / 60;
    run_secs = run_secs_total % 60;
    printf("%-20s: %02ld:%02ld:%02ld \n\n","System run time", run_hours,run_mins,run_secs);

    mem_total = info.totalram>>20;
    mem_free = info.freeram>>20;
    mem_used = (info.totalram - info.freeram)>>20;
    mem_total2 = mem_total/1024.0;
    mem_free2 = mem_free/1024.0;
    mem_used2 = mem_used/1024.0;
    printf("%-20s: %.2f GB\n", "Total RAM",mem_total2);
    printf("%-20s: %.2f GB\n", "Used RAM",mem_used2);
    printf("%-20s: %.2f GB\n", "Free RAM",mem_free2);
    printf("%-20s: %ld%%\n\n","Memory usage", ((info.totalram - info.freeram) * 100) / info.totalram);
    
    printf("%-20s: %d%%\n\n", "GPU utilization",getSysIntValue("/sys/devices/platform/fb000000.gpu/utilisation"));
    for(i=0;i<7;i++){
        char key[128] = {0};
        char value[256] = {0};
        int temp = 0;
        double temp2 = 0;
        sprintf(key,"/sys/class/thermal/thermal_zone%d/type",i);
        getSysStringValue(key,value,sizeof(value));
        memset(key,0,sizeof(key));
        sprintf(key,"/sys/class/thermal/thermal_zone%d/temp",i);
        temp = getSysIntValue(key);
        temp2 = temp/1000.0;
        printf("%-20s: %.3f°\n",value,temp2);
    }
    printf("\n");
    for(i=0;i<8;i++){
        char key[128] = {0};
        char value[256] = {0};
        long temp = 0;
        double temp2 = 0;
        sprintf(key,"/sys/devices/system/cpu/cpu%d/cpufreq/cpuinfo_cur_freq",i);
        getSysStringValue(key,value,sizeof(value));
        temp = strtol(value,NULL,10);
        temp2 = temp/1000000.0;
        memset(key,0,sizeof(key));
        sprintf(key,"cpu%d_cur_freq",i);
        printf("%-20s: %.3f GHZ\n",key,temp2);
    }
    return 0;
}

运行截图如下:
运行截图

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lishi_1991/article/details/129079879

cpu 调频 温度 ondemand-爱代码爱编程

三星 exynos  5410硬件结构体 下图是5410内部TMU(Thermal Management Unit)单元,图中TermalSensor是温度传感器,负责检测CPU的温度,该温度会和设定的温度报警门限进行比较,内核设计者设置的触发门限被存储在对应的ThresholdRise LevelX(X:0-4),当温度发生从一个门限跨到另一个门限

centos7系统信息及运行情况查看-爱代码爱编程

  一、系统信息 [root@www.ctohome.com]# dmidecode|more # dmidecode 2.10 SMBIOS 2.4 present. 57 structures occupying 2318 bytes. Table at 0x000E84B0. Handle 0x0000, DMI type 0, 24 byte

linux调度全景指南-爱代码爱编程

        | 导语 本文主要是讲Linux的调度系统, 由于全部内容太多,分三部分来讲,调度可以说是操作系统的灵魂,为了让CPU资源利用最大化,Linux设计了一套非常精细的调度系统,对大多数场景都进行了很多优化,系统扩展性强,我们可以根据业务模型和业务场景的特点,有针对性的去进行性能优化,在保证客户网络带宽前提下,隔离客户互相之间的干扰

NXP i.MX6 查询linux系统基本信息-爱代码爱编程

项目场景: 在眺望电子TW-IMX6DL-EVM开发板上查询linux系统基本信息。 编译环境及开发包: 主机:ubuntu18.04 交叉编译器:arm-linux-gnueabihf-gcc QT5.12.8:qt-everywhere-opensource-src-5.12.8 开发板:TW-IMX6DL-EVM Linux:Linux-4.

如何用树莓派搭建一台永久运行的个人服务器?-爱代码爱编程

来源| 彭小呆,链接 | segmentfault.com/a/1190000021143144 No.1 树莓派是什么? Raspberry Pi(中文名为树莓派,简写为 RPi,(或者 RasPi / RPI) 是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统基于 Linux。随着 Windows 10 IoT 的发布,我们

i.MX8MM嵌入式linux开发指南+全覆盖开发资料-爱代码爱编程

01教程主题 根据多年工作经验总结框架学习法,先掌握整体的开发流程,然后再逐一击破,综合大量工作中的实战案例,在实践中检验理论知识,强化所学知识点,从而掌握Linux的核心技术。02教学方式 教程由PDF文档与视频配套提供,根据用户个人习惯选择教学方式03教学特点 深入浅出,简单易懂,理论结合实际,突出重点,全是干货,提高学习效率。 配套学习视频教程,彻底

地址总线,字长,内存容量,寻址范围 之间的计算_luckyone906的博客-爱代码爱编程_地址总线和字节

注意:由于虚拟内存技术,在经典32位桌面操作系统中,有32条地址线(特殊情况下可能36条),那么CPU可直接寻址到的内存空间为2^32字节,也就是4GB,虽说内存寻址可以到4G,但是常常在单板机上 并不会有这么大的物理内存。 根据实际情况而不同,可能是512M或者更少,但是由于虚拟内存机制的存在,程序看起来可操作的内存就是4GB,因为MMU总会找到与程序

性能测试策略:系统调优由易到难的顺序-爱代码爱编程

测试阶段 1、性能测试需求分析阶段 根据用户使用习惯和实际业务的性能需求,生成性能测试需求调查表。 根据性能测试需求及系统重要业务调研,选取典型业务。 了解业务模型及业务架构。 2、性能测试设计阶段 编写性能测试用例。 结合性能测试用例录制/修改/完善测试执行脚本。 结合用户应用场景设计性能测试执行场景。 3、性能测试执行阶段 利用Lo

java-爱代码爱编程

目录 1 需求 2 分析 3 搭建私服环境 3.1 下载 nexus 3.2 安装 nexus 3.3 卸载 nexus 3.4 启动 nexus 3.5 仓库类型 4 将项目发布到私服 4.1 需求 4.2 配置 4.3 测试 5 从私服下载 jar 包 5.1 需求 5.2 管理仓库组 5.3 在 setting.xml

linux性能基础:cpu、内存、磁盘等概述_linux性能指标有哪些-爱代码爱编程

目录 1. CPU 1.1. CPU常见品牌 1.2. CPU性能概述 ① CPU主频 ② CPU位数 ③ CPU缓存指令集 ④ CPU核心数 ⑤ IPC 1.3. 上下文切换 1.4. 进程与线程 ① 进程 ② 线程 2. 内存 2.1. 内存主频 2.2. 内存带宽 2.3. 内存分类 2.4. 内存的分配 2.5.