linux c编程 获取本机CPU利用率 内存使用情况 硬盘使用情况

1.获取CPU的利用率

 
  1. typedef struct CPU_PACKED //定义一个cpu occupy的结构体

  2. {

  3. char name[20]; //定义一个char类型的数组名name有20个元素

  4. unsigned int user; //定义一个无符号的int类型的user

  5. unsigned int nice; //定义一个无符号的int类型的nice

  6. unsigned int system; //定义一个无符号的int类型的system

  7. unsigned int idle; //定义一个无符号的int类型的idle

  8. unsigned int iowait;

  9. unsigned int irq;

  10. unsigned int softirq;

  11. }CPU_OCCUPY;


主程序:

 
  1. double cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n)

  2. {

  3. double od, nd;

  4. double id, sd;

  5. double cpu_use ;

  6.  
  7. od = (double) (o->user + o->nice + o->system +o->idle+o->softirq+o->iowait+o->irq);//第一次(用户+优先级+系统+空闲)的时间再赋给od

  8. nd = (double) (n->user + n->nice + n->system +n->idle+n->softirq+n->iowait+n->irq);//第二次(用户+优先级+系统+空闲)的时间再赋给od

  9.  
  10. id = (double) (n->idle); //用户第一次和第二次的时间之差再赋给id

  11. sd = (double) (o->idle) ; //系统第一次和第二次的时间之差再赋给sd

  12. if((nd-od) != 0)

  13. cpu_use =100.0- ((id-sd))/(nd-od)*100.00; //((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used

  14. else cpu_use = 0;

  15. return cpu_use;

  16. }

  17.  
  18. void get_cpuoccupy (CPU_OCCUPY *cpust)

  19. {

  20. FILE *fd;

  21. int n;

  22. char buff[256];

  23. CPU_OCCUPY *cpu_occupy;

  24. cpu_occupy=cpust;

  25.  
  26. fd = fopen ("/proc/stat", "r");

  27. fgets (buff, sizeof(buff), fd);

  28.  
  29. sscanf (buff, "%s %u %u %u %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle ,&cpu_occupy->iowait,&cpu_occupy->irq,&cpu_occupy->softirq);

  30.  
  31. fclose(fd);

  32. }

  33.  
  34. double getCpuRate()

  35. {

  36. CPU_OCCUPY cpu_stat1;

  37. CPU_OCCUPY cpu_stat2;

  38. double cpu;

  39. get_cpuoccupy((CPU_OCCUPY *)&cpu_stat1);

  40. sleep(1);

  41.  
  42. //第二次获取cpu使用情况

  43. get_cpuoccupy((CPU_OCCUPY *)&cpu_stat2);

  44.  
  45. //计算cpu使用率

  46. cpu = cal_cpuoccupy ((CPU_OCCUPY *)&cpu_stat1, (CPU_OCCUPY *)&cpu_stat2);

  47.  
  48. return cpu;

  49. }


2.获取内存的使用情况

 
  1. typedef struct MEM_PACKED //定义一个mem occupy的结构体

  2. {

  3. char name[20]; //定义一个char类型的数组名name有20个元素

  4. unsigned long total;

  5. char name2[20];

  6. }MEM_OCCUPY;

  7.  
  8.  
  9. typedef struct MEM_PACK //定义一个mem occupy的结构体

  10. {

  11. double total,used_rate;

  12. }MEM_PACK;

主程序:

 
  1. MEM_PACK *get_memoccupy () // get RAM message

  2. {

  3. FILE *fd;

  4. int n;

  5. double mem_total,mem_used_rate;;

  6. char buff[256];

  7. MEM_OCCUPY *m=(MEM_OCCUPY *)malloc(sizeof(MEM_OCCUPY));;

  8. MEM_PACK *p=(MEM_PACK *)malloc(sizeof(MEM_PACK));

  9. fd = fopen ("/proc/meminfo", "r");

  10.  
  11. fgets (buff, sizeof(buff), fd);

  12. sscanf (buff, "%s %lu %s\n", m->name, &m->total, m->name2);

  13. mem_total=m->total;

  14. fgets (buff, sizeof(buff), fd);

  15. sscanf (buff, "%s %lu %s\n", m->name, &m->total, m->name2);

  16. mem_used_rate=(1-m->total/mem_total)*100;

  17. mem_total=mem_total/(1024*1024);

  18. p->total=mem_total;

  19. p->used_rate=mem_used_rate;

  20. fclose(fd); //关闭文件fd

  21. return p ;

  22. }

3.获取硬盘的使用情况

 
  1. typedef struct DEV_MEM //定义一个mem occupy的结构体

  2. {

  3. double total,used_rate;

  4. }DEV_MEM;


主程序:

 
  1. DEV_MEM *get_devmem() // get hard disk meeeage

  2. {

  3. FILE * fp;

  4. int h=0;

  5. char buffer[80],a[80],d[80],e[80],f[80],buf[256];

  6. double c,b;

  7. fp=popen("df","r");

  8. fgets(buf,256,fp);

  9. double dev_total=0,dev_used=0;

  10. DEV_MEM *dev=(DEV_MEM *)malloc(sizeof(DEV_MEM));

  11. while(6==fscanf(fp,"%s %lf %lf %s %s %s",a,&b,&c,d,e,f))

  12. {

  13. dev_total+=b;

  14. dev_used+=c;

  15. }

  16. dev->total=dev_total/1024/1024;;

  17. dev->used_rate=dev_used/dev_total*100;

  18. pclose(fp);

  19. return dev;

  20. }

猜你喜欢

转载自blog.csdn.net/qq_19004627/article/details/81097087