代码供学习参考,请仔细阅读代码中的注释
#include "vxWorks.h"
#include "spyLib.h"
#include "stdio.h"
#include "ioLib.h"
#include "stdarg.h"
#include "taskLib.h"
#include "sysLib.h"
#include "string.h"
#define SPYTASKSMAX 100
int data_ana(const char*,...);
/* 函数功能:检测CPU使用率并调用data_ana函数进行处理,最后将使用率打印在shell 上,也可通过重定向打印
* 在别的位置,main函数直接调用该函数即可
* 输入参数:
* 返回值:0
*/
int CPU_utilization(void)
{
spyLibInit(SPYTASKSMAX);//初始化spy,最大可spy任务数为SPYTASKSMAX
spyCommon(5,100,(FUNCPTR)data_ana);//此例程收集任务活动数据并定期运行spyReport()。数据每秒被收集几次,每几秒钟都会生成一个报告。如果freq为零,则默认为5秒。如果ticksPerSec被省略或为零,则默认为100s
return 0;
}
/* 函数功能:可以向不同ip地址发送udp信息
* 输入参数:const char* fmtPtn,... 该参数为不定长参数,其所有参数类型均为const char*,通过
* v1指针循环赋给rbuf,从而得到spy函数在shell上输出的每行内容,从而在经过处理行内容
* 后得到cpu的使用率
* 返回值: 0
*/
int data_ana(const char* fmtPtn,...)
{
char rbuf[256];
const char* IDEL = "IDLE";
char percent[50];
int i=0;
int j=0;
int p;
va_list vl;
va_start(vl,fmtPtn);
vsprintf(rbuf,fmtPtn,vl); //将v1按格式fmtptn写入字符串buf中,得到一行字符串。
if(strstr(rbuf,IDEL)!= NULL)
/*
IDLE占用率表示cpu空闲占比,spy输出信息中,有一行是idel的值,得到该值后用100减去它,就得到cpu使用率
*/
{
printf("%s\n",rbuf);
for(i=0;(i<256)&&(rbuf[i] != '%');i++)
{
if(rbuf[i]>='0'&&rbuf[i]<='9')
{
percent[j] = rbuf[i];
j++;
}
}
percent[j]='\0';
//printf("CPU free percent= %s \n",percent);
p=atoi(percent);
printf("CPU use percent= %i%%\n",100-p);
}
va_end(vl);
return 0;
}