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

 我来答
匿名用户
2019-10-11
展开全部

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

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);
    //}
}
快又稳
2024-10-28 广告
在Linux环境下配置基于域名的虚拟主机,需安装Apache或Nginx等Web服务器,并编辑配置文件。以Apache为例,需创建虚拟主机配置文件,指定域名、文档根目录等,然后启用该配置文件并重启Apache服务。同样,Nginx也需在相应... 点击进入详情页
本回答由快又稳提供
长大的同年
2017-11-04 · TA获得超过3445个赞
知道大有可为答主
回答量:4220
采纳率:96%
帮助的人:774万
展开全部
都在/proc/ 下面 cpu信息在/proc/cpuinfo 启动时间在/proc/uptime 单位是s /proc/stat 里面有cpu执行的时间,用户态,系统态,空闲都有
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式