linux下如何編程得到系統的CPU利用率,記憶體利用率

來源:互聯網
上載者:User

#include<stdlib.h><br />#include<stdio.h><br />#include<unistd.h><br />#define CPU_FILE_PROC_STAT "/proc/stat"<br />/*the utilization of CPU */<br />struct cpu_usage_struct<br />{<br />unsigned long cpu_user;<br />unsigned long cpu_sys;<br />unsigned long cpu_nice;<br />unsigned long cpu_idle;<br />};<br />double get_cpu_use_rate(const struct cpu_usage_struct *cur,<br />const struct cpu_usage_struct *old)<br />{<br />double user,sys,nice,idle,total;<br />double cpu_rate;<br />user = (double)(cur->cpu_user - old->cpu_user);<br />sys = (double)(cur->cpu_sys - old->cpu_sys);<br />nice = (double)(cur->cpu_nice - old->cpu_nice);<br />idle = (double)(cur->cpu_idle - old->cpu_idle);<br />total = user + sys + nice + idle;<br />cpu_rate = (1-idle/total)*100;<br />return cpu_rate;<br />}<br />double get_cpu_free_rate(const struct cpu_usage_struct *cur,<br />const struct cpu_usage_struct *old)<br />{<br />double user,sys,nice,idle,total;<br />double free_rate;<br />user = (double)(cur->cpu_user - old->cpu_user);<br />sys = (double)(cur->cpu_sys - old->cpu_sys);<br />nice = (double)(cur->cpu_nice - old->cpu_nice);<br />idle = (double)(cur->cpu_idle - old->cpu_idle);<br />total = user + sys + nice + idle;<br />free_rate = (idle /total)*100;<br />return free_rate;<br />}<br />int get_cpuinfo_from_proc_stat(struct cpu_usage_struct *usage)<br />{<br />FILE *fp = NULL;<br />char tmp[10];<br />fp = fopen(CPU_FILE_PROC_STAT,"r");<br />if(fp == NULL)<br />{<br />perror("fopen");<br />return -1;<br />}<br />printf("%s,%d/n",__FILE__,__LINE__);<br />fscanf(fp,"%s %lu %lu %lu %lu",tmp,&(usage->cpu_user),&(usage->cpu_sys),<br />&(usage->cpu_nice),&(usage->cpu_idle));<br />printf("%s %d/n",__FILE__,__LINE__);<br />fclose(fp);<br />printf("%s %d/n",__FILE__,__LINE__);<br />return 1;<br />}<br />int main()<br />{<br />struct cpu_usage_struct *cur,*old;<br />double use_rate,free_rate;<br />old = (struct cpu_usage_struct*)malloc(sizeof(struct cpu_usage_struct));<br />if(old == NULL)<br />{<br />perror("malloc error");<br />return -1;<br />}<br />cur = (struct cpu_usage_struct*)malloc(sizeof(struct cpu_usage_struct));<br />if(cur == NULL)<br />{<br />perror("malloc error");<br />return -1;<br />}<br />get_cpuinfo_from_proc_stat(old);<br />sleep(100);<br />get_cpuinfo_from_proc_stat(cur);<br />use_rate = get_cpu_use_rate(cur,old);<br />free_rate = get_cpu_free_rate(cur,old);<br />printf("use_rate:%lf,free_rate:%lf/n",use_rate,free_rate);<br />return 1;<br />}

 

 

cat   /proc/meminfo可讀出記憶體資訊  
  cat   /proc/cpuinfo       cat   /proc/stat   這兩個可以讀cpu資訊  
  詳情參見/proc檔案系統

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.