linux c程序获取cpu使用率及内存使用情况(11页).doc





《linux c程序获取cpu使用率及内存使用情况(11页).doc》由会员分享,可在线阅读,更多相关《linux c程序获取cpu使用率及内存使用情况(11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-linux c程序获取cpu使用率及内存使用情况-第 11 页想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了。方法就是读取proc下的文件来获取了。 cpu使用率: /proc/stat ,内存使用情况: /proc/meminfo看程序 :/* file: statusinfo.c* brief: 从linux系统获取cpu及内存使用情况* version 1.0* author 抹黑* date 2009年3月17日*/typedef struct PACKED /定义一个cpu occupy的结构体char name20; /定义一个char类型的数
2、组名name有20个元素unsigned int user; /定义一个无符号的int类型的userunsigned int nice; /定义一个无符号的int类型的niceunsigned int system;/定义一个无符号的int类型的systemunsigned int idle; /定义一个无符号的int类型的idleCPU_OCCUPY;typedef struct PACKED /定义一个mem occupy的结构体char name20; /定义一个char类型的数组名name有20个元素unsigned long total;char name220;unsigned l
3、ong free;MEM_OCCUPY;get_memoccupy (MEM_OCCUPY *mem) /对无类型get函数含有一个形参结构体类弄的指针O FILE *fd; int n; char buff256; MEM_OCCUPY *m; m=mem; fd = fopen (/proc/meminfo, r); fgets (buff, sizeof(buff), fd); fgets (buff, sizeof(buff), fd); fgets (buff, sizeof(buff), fd); fgets (buff, sizeof(buff), fd); sscanf (bu
4、ff, %s %u %s, m-name, &m-total, m-name2); fgets (buff, sizeof(buff), fd); /从fd文件中读取长度为buff的字符串再存到起始地址为buff这个空间里 sscanf (buff, %s %u, m-name2, &m-free, m-name2); fclose(fd); /关闭文件fdint cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n) unsigned long od, nd; unsigned long id, sd; int cpu_use = 0; od = (unsi
5、gned long) (o-user + o-nice + o-system +o-idle);/第一次(用户+优先级+系统+空闲)的时间再赋给od nd = (unsigned long) (n-user + n-nice + n-system +n-idle);/第二次(用户+优先级+系统+空闲)的时间再赋给od id = (unsigned long) (n-user - o-user); /用户第一次和第二次的时间之差再赋给id sd = (unsigned long) (n-system - o-system);/系统第一次和第二次的时间之差再赋给sd if(nd-od) != 0)
6、 cpu_use = (int)(sd+id)*10000)/(nd-od); /(用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used else cpu_use = 0; /printf(cpu: %un,cpu_use); return cpu_use;get_cpuoccupy (CPU_OCCUPY *cpust) /对无类型get函数含有一个形参结构体类弄的指针O FILE *fd; int n; char buff256; CPU_OCCUPY *cpu_occupy; cpu_occupy=cpust; fd = fopen (/proc/stat, r)
7、; fgets (buff, sizeof(buff), fd); sscanf (buff, %s %u %u %u %u, cpu_occupy-name, &cpu_occupy-user, &cpu_occupy-nice,&cpu_occupy-system, &cpu_occupy-idle); fclose(fd);int main() CPU_OCCUPY cpu_stat1; CPU_OCCUPY cpu_stat2; MEM_OCCUPY mem_stat; int cpu; /获取内存 get_memoccupy (MEM_OCCUPY *)&mem_stat); /第一
8、次获取cpu使用情况 get_cpuoccupy(CPU_OCCUPY *)&cpu_stat1); sleep(10); /第二次获取cpu使用情况 get_cpuoccupy(CPU_OCCUPY *)&cpu_stat2); /计算cpu使用率 cpu = cal_cpuoccupy (CPU_OCCUPY *)&cpu_stat1, (CPU_OCCUPY *)&cpu_stat2); return 0;linux下如何获取cpu的利用率proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过pro
9、c得到系统的信息,并可以改变内核的某些参数。这里将介绍如何从/proc文件系统中获取与防火墙相关的一些性能参数,以及如何通过/proc文件系统修改内核的相关配置。1、从/proc文件系统获取相关的性能参数cpu使用率: /proc/stat内存使用情况: /proc/meminfo网络负载信息: /proc/net/dev相应的计算方法:(摘自:什么是proc文件系统,见参考资料)(1) 处理器使用率(2) 内存使用率(3) 流入流出数据包(4) 整体网络负载这些数据分别要从/proc/stat、/proc/net/dev、/proc/meminfo三个文件中提取。如里有问题或对要提取的数据不
10、太清楚,可以使用man proc来查看proc文件系统的联机手册。(1) 处理器使用率这里要从/proc/stat中提取四个数据:用户模式(user)、低优先级的用户模式(nice)、内核模式(system)以及空闲的处理器时间(idle)。它们均位于/proc/stat文件的第一行。CPU的利用率使用如下公式来计算。CPU利用率 = 100 *(user + nice + system)/(user + nice + system + idle)(2) 内存使用率这里需要从/proc/meminfo文件中提取两个数据,当前内存的使用量(cmem)以及内存总量(amem)。内存使用百分比 =
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux c程序获取cpu使用率及内存使用情况11页 程序 获取 cpu 使用率 内存 使用 情况 11

限制150内