Linux c 语言怎么方便的读取 cpu,磁盘信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux c 语言怎么方便的读取 cpu,磁盘信息相关的知识,希望对你有一定的参考价值。

我附上我的代码给你参考。

CPU占用 需要查看/proc/stat 的信息

磁盘需要 使用statfs这个函数来确认文件所包含的信息。

我附上我的代码给你参考。

我的代码支持CPU使用率(占用率),内存占用率,及磁盘占用率。

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>

#include <sys/vfs.h>
#include <error.h>
#define Gsize (1024.00*1024.00*1024.00)
#define Msize (1024.00*1024.00)

#ifndef EXT2_SUPER_MAGIC
#define EXT2_SUPER_MAGIC 0xef53
#endif

double time_so_far();
float get_cpu_rate();
float get_memory_rate();
float get_disk_rate();

int main(int argc,char *argv[])

    get_cpu_rate();
    get_memory_rate();
    get_disk_rate();
    return 0;

double time_so_far()
    struct timeval tp;
    if(gettimeofday(&tp,(struct timezone *)NULL) == -1)
        perror("gettimeofday");
    return ((double)(tp.tv_sec))+(((double)tp.tv_usec)*0.000001);

float get_cpu_rate()
    FILE *f1;
    double ti,tf;
    char c[10],d[10];
    int t,i1,i2,i3,i4,i5,i6;
    
    ti=time_so_far();
    f1=fopen("/proc/stat","r");
    fscanf(f1,"%s\\t%d\\t%d\\t%d\\n",c,&i1,&i2,&i3);
    fclose(f1);
    printf("%s\\t%d\\t%d\\t%d\\n",c,i1,i2,i3);
    usleep(1000000);

    tf=time_so_far();
    f1=fopen("/proc/stat","r");
    fscanf(f1,"%s\\t%d\\t%d\\t%d\\n",c,&i4,&i5,&i6);
    fclose(f1);
     printf("%s\\t%d\\t%d\\t%d\\n",c,i4,i5,i6);
    t=(i4+i5+i6)-(i1+i2+i3);
    printf("%d\\n",t);
    printf("cpu usage: %.2f%%\\n",( t/((tf-ti)*100) )*100 );


float get_memory_rate()
    FILE *f1;
    int itemp1,itemp2;
    char c[10],d[10];

    f1=fopen("/proc/meminfo","r");
    fscanf(f1,"%s\\t%d\\t%s",c,&itemp1,d);
    printf("memory total is %d Kb\\n",itemp1);
    printf("memory total is %.2f Mb\\n",itemp1/1024.0);
    fscanf(f1,"%s\\t%d\\t%s",c,&itemp2,d);
    printf("memory free is %d Kb\\n",itemp2);
    printf("memory free is %.2f Mb\\n",itemp2/1024.0);
    fclose(f1);
    printf("men usage : %.2f%%\\n",((itemp1-itemp2)*100.0)/itemp1);



float get_disk_rate()
    struct statfs *fs;
    long long blocks,bfree;
    if(statfs("/",fs) != 0)
        
            perror("stafts");
            printf("exit\\n");
            exit(1);
        
    blocks=fs->f_blocks;
    bfree=fs->f_bfree;
    //if(fs.f_type == EXT2_SUPER_MAGIC)
    //
        printf("Disk size of / is %.2f G\\n",blocks*fs->f_bsize/Gsize);
        printf("Free Disk size of / is %.2f G\\n",bfree*fs->f_bsize/Gsize);
        printf("Disk usage of / is %.2f%% \\n",bfree*100.0/blocks);
    //

参考技术A 都在/proc/ 下面 cpu信息在/proc/cpuinfo 启动时间在/proc/uptime 单位是s /proc/stat 里面有cpu执行的时间,用户态,系统态,空闲都有本回答被提问者采纳

Java怎么远程读取Linux的cpu使用率

参考技术A   linux获取cpu使用率
  Windows查看CPU使用率很简单,我们通过任务管理器就能看到。那么对于linux来说,怎么查看获取CPU使用率呢?咗嚛本经验以Centos系统为例
  工具/原料
  Centos
  获取CPU使用率
  实时CPU使用率
  类似任务管理器实时系统信息可以通过top命令查看。显示的信息四个参数分别是:用户的模式(user)、低优先级的用户模式(nice)、系统内核模式(system)以及系统空闲的处理器时间(idle)
  查看CPU处理器使用率
  对于CPU使用率一般都是通过CPU使用情况,查看/proc/stat
cpu状态文件
  平均CPU使用率
  对于一般某时间段CPU的使用率来说,可以通过查看/pRoc/loadavg
文件信息
  第三方监控软件查看
  网上有很多网管,监控软件安装配置好之后。可以通过网页管理查看CPU等硬件情况和CPU使用率,负载等参数
  其它相关信息
  内存使用率
查看
/proc/meminfo查看内存详细信息,也可以通过free
命令查看
  网络利用率
通过查看文件/proc/net/dev
可以了解,centos系统的网络使用情况跟windows的网络情况类似
  注意事项
  如果是查看系统负载的话是需要通过,CPU使用率,内存使用率,网络负载,硬盘容量等等来综合计算出来的。如果对于linux不是特别了解,或者想一次获取比较全面,可以通过编写脚本或者相关的监控工具。

以上是关于Linux c 语言怎么方便的读取 cpu,磁盘信息的主要内容,如果未能解决你的问题,请参考以下文章

linux下怎么用c语言获取一帧屏幕图像数据,怎么分块

C语言中fopen函数打开文件后,文件以何种方式读入内存?

Java怎么远程读取Linux的cpu使用率

Linux下调试编写并调试C语言程序,怎么查看它的内存和CPU信息?GDB中可以实现吗?

linux怎么看cpu使用率

在linux下的c语言编程时使用readdir的时候读取到的“.”和“..”怎么去掉?