Linux下获取内存占有率和CPU占有率

<span style="font-size:14px;">#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//Cpu(s):  0.0%us,  0.1%sy,  0.0%ni, 99.1%id,  0.6%wa,  0.0%hi,  0.1%si,  0.0%st
//Mem:   1004608k total,   414696k used,   589912k free,    81872k buffers
//Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
//"%*s%f%*s%f%*s%f%*s%f%*s%f%*s%f%*s%f%*s%f%*s"
//Mem:   1004608k total,   414696k used,   589912k free,    81872k buffers
//sscanf(buf,"%*s%f%*s%*s%f%*s%*s%f%*s%*s%f%*s%*s",&memdata->total,&memdata->used,&memdata->free,&memdata->buffers);

typedef struct{
		float us;
		float sy;
		float ni;
		float id;
		float wa;
		float hi;
		float si;
		float st;
	}CPUDATA;	
typedef struct{
		float total;
		float used;
		float free;
		float buffers;
	}MEMDATA;
typedef struct{
		float cpuOccupy;
		float memOccupy;
	}OCCUPY;
#define BUFFER_SIZE 500

OCCUPY getOccupy(void)
{	
	FILE * fp;
	fp = fopen("./datafile_cpu_mem","w+");
	system("top -n 2 | grep -E 'Cpu|Mem' > ./datafile_cpu_mem");	
	char * buf = (char *)malloc(BUFFER_SIZE);	
	
	fgets(buf,BUFFER_SIZE,fp);
	fgets(buf,BUFFER_SIZE,fp);
	memset(buf,0x00,BUFFER_SIZE);
	fgets(buf,BUFFER_SIZE,fp);	
	printf("buf is %s\n",buf);
	CPUDATA * cpudata = (CPUDATA *)malloc(sizeof(CPUDATA));
	sscanf(buf,"%*s%f%*s%f%*s%f%*s%f%*s%f%*s%f%*s%f%*s%f%*s",&cpudata->us,&cpudata->sy,&cpudata->ni,&cpudata->id,&cpudata->wa,&cpudata->hi,&cpudata->si,&cpudata->st);
	printf("cpudata is %f  %f  %f  %f  %f  %f  %f  %f  %f\n",cpudata->us,cpudata->sy,cpudata->ni,cpudata->id,cpudata->wa,cpudata->hi,cpudata->si,cpudata->st);
	
	memset(buf,0x00,BUFFER_SIZE);
	fgets(buf,BUFFER_SIZE,fp);
	printf("buf is %s\n",buf);
	MEMDATA * memdata = (MEMDATA*)malloc(sizeof(MEMDATA));
	
	sscanf(buf,"%*s%*s%f%*s%*s%f%*s%*s%f%*s%*s%f%*s%*s",&memdata->total,&memdata->used,&memdata->free,&memdata->buffers);
	printf("memdata is : %f %f %f %f\n",memdata->total,memdata->used,memdata->free,memdata->buffers);
	
	OCCUPY occupy;
	occupy.cpuOccupy = 100.0 - cpudata->id;
	occupy.memOccupy = 100.0 *(1 - memdata->free /memdata->total);
	free(buf);
	free(memdata);
	free(cpudata);
	fclose(fp);

	return occupy;
}	


void main()
{
	OCCUPY occupy = getOccupy();
	printf("cpu is %f,mem is %f\n",occupy.cpuOccupy,occupy.memOccupy);
}</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值