当前位置:  技术问答>linux和unix

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

    来源: 互联网  发布时间:2015-11-17

    本文导语:  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; ...

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还可一个获得进程列表

    
 
 

您可能感兴趣的文章:

  • 请问:Linux下用C编程计算CPU利用率和内存利用率?
  • 如何获得Linux的CPU使用率
  • 跪求linux下CPU平均占用率获得方法
  • 请教:linux下有统计CPU的个数和CPU利用率的函数吗???(急!!!)
  • 请问我的linux的内存占用率怎么老是接近100%啊?
  • linux下程序启动后cpu占用率达到101%--102%
  • 有谁知道linux操作系统察看cpu使用率的命令,回答正确给高分,急,在线等待!!!
  • 在linux下如何将cpu和内存的使用率保存到mysql或者日志文件中?
  • NOSQL iis7站长之家
  • linux取的cpu的占用率
  • 如何限制linux服务器用户cpu和mem的使用率
  • linux下如何获取cpu的利用率??或用什么系统调用?
  • 在linux下如何通过编程获得网络流量或cpu占用率?
  • 求助:java实现显示linux下的cpu占用率,内存使用情况,硬盘占用情况
  • 如何在Linux下实现取得虚拟内存的使用率?
  • linux多线程程序cpu占用率问题
  • 怎么样用程序取得Linux系统的CPU利用率和内存的使用情况呀?
  • 在linux下取系统信息,网卡带宽,内存使用率,CPU,I/O状态,网络状态的命令分别是什么?
  • Red Hat Linux 9在图形界面下内存使用率为什么很高?
  • linux中到底有没有获取CPU使用率的API?
  • 如何得到Linux的系统命令源代码,比如ping,mount,ls等?
  • 用java的话,能调用linux的一些常用命令么?比如find等等
  • 问下啊。比如自己开发的linux驱动要gpl吗?
  • linux 用什么画 UML图呢 比如数据流图 类图 等
  • linux0.11内核有些函数是封装的吗?比如timer_interrupt()函数。
  • linux平台有哪些著名开源软件比如nagios,
  • linux下文件夹带"."表示什么意思,比如/etc/pam.d这个文件夹?
  • 如何在启动LINUX时,不加载某些模块?比如声音部分。网卡部分。
  • 求软件:linux下什么工具可以对pdf文件修改(比如注释,圈圈划划)
  • linux7.3下的一些工具,比如userconf、netconf之类的文件在哪里?
  • linux 下可以玩游戏吗?比如星际?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 没有LINUX经验如何获得一份LINUX工作
  • linux下什么语言获得参数是~1
  • 如何获得linux下 命令行长度最长是多少?或者如何知道linux下,一个文件的一行最长是多少?
  • Linux下怎么用程序获得U盘盘符文件
  • 请教:如何在Linux下获得EDID信息
  • 如何获得linux系统中,usb设备的id
  • 急!在Linux下获得硬盘剩余空间的c函数是什么?
  • 在linux中,如何在程序中获得分辨率!
  • 如何获得Linux下所有顶层窗口的句柄,急急急!
  • Linux怎么获得局域网终其他windows机器的时间?
  • linux下如何获得一个目录下的文件数(包含子目录中的文件数)?
  • linux下如何释放ip和重新自动获得ip
  • linux下如何获得硬件信息。如:cpu 硬盘的序列号
  • 请问如何通过命令来获得本机linux的ip地址?
  • 请问Linux下要获得网络接口的相关信息,像ifconfig,netstat那样
  • 如何在Linux下用C获得对方IP和端口?
  • 请问如何在Linux下获得网卡的接口速率?
  • 求助:在LINUX下如何获得系统剩余的磁盘空间?
  • linux 下如何获得CPU个数!
  • linux下如何获得音频文件的振幅??????????
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3