代码供学习参考,请仔细阅读代码中的注释


#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; 
}