Linux CPU使用率获取 c

Linux CPU使用率获取 C

#include <stdio.h>
#include <unistd.h>
#include <string.h>

typedef struct CPU_PACKED
{
    char name[20];
    unsigned int user;
    unsigned int nice;
    unsigned int system;
    unsigned int idle;
}CPU_OCCUPY;

int cal_cpuoccupy(CPU_OCCUPY *o, CPU_OCCUPY *n)
{
    unsigned long od, nd;
    unsigned long id, sd;
    int cpu_use = 0;

    od = (unsigned long)(o->user + o->nice + o->system + o->idle);
    nd = (unsigned long)(n->user + n->nice + n->system + n->idle);

    id = (unsigned long)(n->user - o->user);
    sd = (unsigned long)(n->system - o->system);

    if(nd-od !=0)
    {
        cpu_use = (int)((sd+id)*100)/(nd-od);

    }
    else
    {
        cpu_use = 0;
    }
    return cpu_use;
}

void get_cpuoccupy(CPU_OCCUPY *cpust)
{
    FILE *fd;
    int n;
    char buf[256];
    CPU_OCCUPY *cpu_occupy;
    cpu_occupy = cpust;
    fd = fopen("/proc/stat", "r");
    fgets(buf, sizeof(buf), fd);
    //memset(cpu_occupy->name,0,sizeof(cpu_occupy->name));
    //cpu_occupy->user=0;
    //cpu_occupy->nice=0;
    //cpu_occupy->system=0;
    //cpu_occupy->idle=0;
    sscanf(buf, "%s %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice, &cpu_occupy->system, &cpu_occupy->idle);
    fclose(fd);

}
int display_progress(int progress, int last_char_count)
{
    int i = 0;

    /*把上次显示的进度条信息全部清空*/
    for (i = 0; i < last_char_count; i++)
    {
        //printf("\b");
    }

printf("CPU Usage:[");
    /*此处输出‘=’,也可以是其他字符,仅个人喜好*/
    for (i = 0; i < progress; i++)
    {
            printf("#");
    }
    //printf(">>");
    /*输出空格截止到第104的位置,仅个人审美*/
    for (i += 2; i < 104; i++)
    {
            printf(" ");
    }
    /*输出进度条百分比*/
    i = i + printf("%-3d%%]", progress);
    /*此处不能少,需要刷新输出缓冲区才能显示,
 *     这是系统的输出策略*/
    fflush(stdout);

printf("\r");
    /*返回本次显示进度条时所输出的字符个数*/
    return i;
}

int main()
{
    CPU_OCCUPY cpu_stat1, cpu_stat2;
    int cpu;
    int ret;

    while(1)
    {
        cpu=0;
        get_cpuoccupy((CPU_OCCUPY*)&cpu_stat1);
        //printf("%s,%u,%u,%u,%u\n",cpu_stat1.name,cpu_stat1.user,cpu_stat1.nice,cpu_stat1.system,cpu_stat1.idle);
        sleep(1);
        get_cpuoccupy((CPU_OCCUPY*)&cpu_stat2);
        //printf("%s,%u,%u,%u,%u\n",cpu_stat2.name,cpu_stat2.user,cpu_stat2.nice,cpu_stat2.system,cpu_stat2.idle);
        cpu = cal_cpuoccupy((CPU_OCCUPY *)&cpu_stat1, (CPU_OCCUPY *)&cpu_stat2);
        ret = display_progress(cpu, ret);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/tianyuanchen/p/12166006.html

时间: 2024-10-27 16:53:58

Linux CPU使用率获取 c的相关文章

查看线程linux cpu使用率

Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算 转 http://www.cnblogs.com/lidabo/p/4738113.html目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps 命令 top命令 单核情况下Cpu使用率的计算 基本思想 总的Cpu使用率计算 计算方法 某一进程Cpu使用率的计算 计算方法 实验数据

Linux CPU使用率的计算

     CPU 使用率衡量的是程序运行占用的CPU 百分比.Linux 的CPU 使用率信息可以通过/proc/stat 文件计算得到. proc 文件系统       /proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数.由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提

linux CPU使用率过高或负载过高的处理思路

1.查看系统CPU负载及使用率的命令为:top    vmstat top 命令:查看进程级别的cpu使用情况. vmstat 命令:查看系统级别的cpu使用情况. 下面通过具体的图例来分析: 1.1  top 命令可以查看进程的CPU.内存等资源的使用情况.       在top命令运行过程中可以通过top的内部命令做显示方式的控制. 1- 开启或关闭显示所有cpu使用详细情况 l - 关闭或开启第一部分第一行 top 信息的表示 t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpu

获取Windows操作系统的CPU使用率以及内存使用率

阅读目录 声明定义 引用lib文件 获取操作系统CPU使用率 获取操作系统内存大小 获取操作系统内存使用率 此功能参考了ProcessHacker项目的代码. 回到顶部 声明定义  Collapse typedef struct _UINT64_DELTA { ULONG64 Value; ULONG64 Delta; } UINT64_DELTA, *PUINT64_DELTA; typedef struct _UINTPTR_DELTA { ULONG_PTR Value; ULONG_PT

Linux下java获取CPU、内存、磁盘IO、网络带宽使用率

一.CPU 使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数." 从/proc文件系统获取cpu使用情况:    cat /proc/stat 在Linux的内核中,有一个全 局变量:Jiffies. Jiffies代表时间.它的单位随硬件平台的不同而不同.系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目.这样ji

Linux c 获取cpu使用率(2)

上一篇博文当中,我们谈论了在Linux中如何获取执行命令行的结果,最终得到cpu的 使用率,但是十分不幸的事情是: 1)通过top -n 1 | grep Cpu获取的cpu使用率不会刷新,每次读取结果只能够得到第一次执行的结果. 2)可能导致SIGNAL上的冲突 新的代码的解决原理: 通过读取/proc/stat中的数据计算得出cpu的使用率 #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #i

Java获取Linux系统cpu使用率

原文:http://www.open-open.com/code/view/1426152165201 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Li

编程获取linux的CPU使用率内存占用率

Linux下提供top.ps命令查看当前cpu.mem使用情况,简要介绍如下: 一.使用ps查看进程的资源占用 ps -aux 查看进程信息时,第三列就是CPU占用. [[email protected] utx86]# ps -aux | grep my_process Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ root   14415  3.4  0.9   37436  203

获取系统cpu使用率(linux C)

typedef struct cpu_occupy_ //定义一个cpu occupy的结构体 { char name[20]; //定义一个char类型的数组名name有20个元素 unsigned int user; //定义一个无符号的int类型的user unsigned int nice; //定义一个无符号的int类型的nice unsigned int system; //定义一个无符号的int类型的system unsigned int idle; //定义一个无符号的int类型