linux中的cpu idle,linux下如何获得系统信息,比如cpu占用率

RT

谢谢

|

#define SET_IF_DESIRED(x,y)  if(x) *(x) = (y)

#define _ULL unsigned long long

int FiveCpuNumbers(_ULL *uret,_ULL *nret,_ULL *sret,_ULL *iret,_ULL *iowait)

{

static _ULL u = 0, m = 0, s = 0, i = 0, iw = 0;

_ULL user_j, nice_j, sys_j, idle_j, iowait_j = 0;

FILE *fp;

size_t byte_read;

char buffer[100];

fp = fopen("/proc/stat", "r");

byte_read = fread(buffer, 1, sizeof(buffer)-1, fp);

fclose(fp);

if (byte_read==0 || byte_read==sizeof(buffer))

return -1;

buffer[byte_read] = '';

sscanf(buffer, "cpu %Lu %Lu %Lu %Lu %Lu", &user_j, &nice_j, &sys_j, &idle_j, &iowait_j);

SET_IF_DESIRED(uret, user_j - u);

SET_IF_DESIRED(nret, nice_j - m);

SET_IF_DESIRED(sret, sys_j - s);

/* Idle can go backwards one tick due to kernel calculation issues */

SET_IF_DESIRED(iret, (idle_j > i) ? (idle_j - i) : 0);

SET_IF_DESIRED(iowait, iowait_j - iw);

u = user_j;

m = nice_j;

s = sys_j;

i = idle_j;

iw = iowait_j;

//printf("cpu %Lu %Lu %Lu %Lu %Lu n",user_j,nice_j,sys_j,idle_j,iowait_j);

return 0;

}

/*

* get the cpu usage

*/

int ReadCpuInfo(float &fCpuUsage)

{

float cpu_usage;

_ULL user_j, nice_j, sys_j, idle_j, iowait_j = 0;

if(FiveCpuNumbers(&user_j, &nice_j, &sys_j, &idle_j, &iowait_j)!=0)

return -1;

usleep(500000);

if(FiveCpuNumbers(&user_j, &nice_j, &sys_j, &idle_j, &iowait_j)!=0)

return -1;

//usleep(500000);

//if(FiveCpuNumbers(&user_j, &nice_j, &sys_j, &idle_j, &iowait_j)!=0)

//return -1;

cpu_usage = (idle_j * 100.0) / (user_j + nice_j + sys_j + idle_j + iowait_j);

if (cpu_usage>100)

cpu_usage = 100.0;

/* change to useage */

cpu_usage = 100.0 - (cpu_usage);

fCpuUsage = cpu_usage;

printf("### CPU Usage : %0.3f %%n", cpu_usage);

return 0;

}

#undef _ULL

|

typedef  struct ProcInfo

{

char name[MAX_PROC_NAME];/*process name*/

int PID; /*process id*/

int PPID; /*parent process id*/

int status; /* sleeping or running*/

struct ProcInfo * Next; /*pointer to next process struct*/

}* ProcList;

typedef struct netCards

{

char name[MAX_NET_CARD_NAME];/*net card name*/

int  ByteRcv; /*bytes received*/

int  ByteSnd; /*bytes sent*/

}* netCardList;

struct eCop_SM_Object

{

char  OsName[MAX_OS_NAME];/*do not alarm*/

int   CPU_Percent[MAX_CPUS];/*for example 34 means 0.34%*/

int   DiskAvail; /*available disk*/

int   MemUsed; /*memory used*/

/*including sending bytes and receiving bytes*/

struct netCards netCard[MAX_NET_CARDS];

struct ProcInfo * PrList;

/*

evaluate the time to it when  sampling, if

it is -1,we consider it an invalid object

*/

long TimeStamp;

};

/*get os information and store it in a struct*/

int sample(struct eCop_SM_Object * obj);

|

在本论坛搜CPU。

|

top源代码里面machine目录下的m_linux.c里面有一个get_system_info的方法,可以获得内存,CPU,经过适当的的加工后,可以获得网络流量和磁盘空间,另外top还可一个获得进程列表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值