Loading
新闻中心库存中心价格中心PDF中心图片中心
ICGLE 电子技术支持中心,为电气人员和相关企业提供全面的信息(IC技术\IC库存\IC图片\PDF资料等)服务
总线设计PCB设计单片机DSPARM
JAVA驱动设计C/C++汇编J2EE网络协议中间件技术嵌入式系统无线通信通信网络模拟技术接口电路显示光电传感与控制EDA/PLD
气流体控制电子产品电机及工具通信设备仪器仪表电线电缆建筑电气低压电器高压电器电源工控自动化广电设备医疗器械More..
电源设计仪器仪表技术专递电路图片电子专栏储存技术汽车电子测量测试音响技术家用电器
成功方案市场分析行业标准应用前沿芯片应用综合专区
Linux下获得CPU利用率和内存使用情况
来源:赛迪网   作者:
字体大小:[大][中][小]

  在Linux中如果要监视一个进程的运行情况,如查看它的CPU使用效率和内存使用情况,就需要从系统的/proc目录的读取一些系统信息。

  在Linux中如果要监视一个进程的运行情况,如查看它的CPU使用效率和内存使用情况,就需要从系统的/proc目录的读取一些系统信息。然后分析得到结果,特别是在嵌入式中的应用程序这个功能就很重要。本文中的代码是从top命令的源代码分析中获得,并做了部分修改,在FC6+GCC4.1调试通过。从这个工程中我也获得一些感悟。

  1. Linux系统很优雅,如果在Windows中做这个功能就需要调用ActiveX控件。而在Linux中只需要读取文本。

  2.想完成什么功能,如果不知道怎么做,就想有没有没有其它的软件有这个功能,如果有,查看它的源代码就可以了,然后定制自己需要的功能。

  3.多想多看多做,学习技术的不二法门。

  下面是获得系统CPU和内存情况的代码:

  void
  get_system_info(info)
  struct system_info * info;
  {
  char buffer[ 4096 + 1 ];
  int fd, len;
  char * p;
  int i;
  /* get load averages */
  {
  fd = open( " loadavg " , O_RDONLY);
  len = read(fd, buffer, sizeof (buffer) - 1 );
  close(fd);
  buffer[len] = \0 ;
  info -> load_avg[ 0 ] = strtod(buffer, p);
  info -> load_avg[ 1 ] = strtod(p, p);
  info -> load_avg[ 2 ] = strtod(p, p);
  p = skip_token(p); /* skip running/tasks */
  p = skip_ws(p);
  if ( * p)
  info -> last_pid = atoi(p);
  else
  info -> last_pid = - 1 ;
  }
  /* get the cpu time info */
  {
  fd = open( " stat " , O_RDONLY);
  len = read(fd, buffer, sizeof (buffer) - 1 );
  close(fd);
  buffer[len] = \0 ;
  p = skip_token(buffer); /* "cpu" */
  cp_time[ 0 ] = strtoul(p, & p, 0 );
  cp_time[ 1 ] = strtoul(p, & p, 0 );
  cp_time[ 2 ] = strtoul(p, & p, 0 );
  cp_time[ 3 ] = strtoul(p, & p, 0 );
  /* convert cp_time counts to percentages */
  percentages( 4 , cpu_states, cp_time, cp_old, cp_diff);
  }
  /* get system wide memory usage */
  {
  char * p;
  fd = open( " meminfo " , O_RDONLY);
  len = read(fd, buffer, sizeof (buffer) - 1 );
  close(fd);
  buffer[len] = \0 ;
  /* be prepared for extra columns to appear be seeking
  to ends of lines */
  p = buffer;
  p = skip_token(p);
  memory_stats[ 0 ] = strtoul(p, & p, 10 ); /* total memory */
  p = strchr(p, \n );
  p = skip_token(p);
  memory_stats[ 1 ] = strtoul(p, & p, 10 ); /* free memory */
  p = strchr(p, \n );
  p = skip_token(p);
  memory_stats[ 2 ] = strtoul(p, & p, 10 ); /* buffer memory */
  p = strchr(p, \n );
  p = skip_token(p);
  memory_stats[ 3 ] = strtoul(p, & p, 10 ); /* cached memory */
  for (i = 0 ; i < 8 ;i ++ ) {
  p ++ ;
  p = strchr(p, \n );
  }
  p = skip_token(p);
  memory_stats[ 4 ] = strtoul(p, & p, 10 ); /* total swap */
  p = strchr(p, \n );
  p = skip_token(p);
  memory_stats[ 5 ] = strtoul(p, & p, 10 ); /* free swap */
  }
  /* set arrays and strings */
  info -> cpustates = cpu_states;
  info -> memory = memory_stats;

Upload by 小刘(2007-6-20)
IC
IC
推荐技术文章:
·利用VxWorks作Internet....
·linux下命令行下编译c程序..
·移植U-Boot到AT91RM920....
·一种改进嵌入式Linux操作系统实时....
·Linux内核初始化及启动之用户模式....
·Linux在信息家电(IA)上的应用..
·嵌入式Linux的动态扩展技术研究..
·基于Linux的嵌入式POS的GUI....
·Linux嵌入式系统与硬件平台的关系..
·基于嵌入式Linux的打印控制系统的....
·擂台战:嵌入式Linux面临图形化挑....
·面向多媒体应用的嵌入式Linux实时....
·Linux系统内存磁盘初始化技术详细....
·Linux下的网络HOOK实现以及使....
·Linux系统下搭建C/C++开发的....
·移动电话挑战嵌入式Linux..
·在嵌入式Linux上实现JFFS文件....
·基于嵌入式Linux系统界面的研究 ..
·Linux的向“心”力运动..
·支持基于Linux的USB设备的三种....
·基于ARM的嵌入式Linux开发平台
·主流嵌入式Linux动态扩展技术比较..
·嵌入Linux基于MiniGUI信息..
·蓝牙模块在HHARM2410上的移植
·基于Linux的嵌入式系统在测控系统..
·uClinux在嵌入式系统中的移植研..
·用busybox制作嵌入式Linux..
·基于uClinux的远程温度监控系统..
·uClinux内核移植相关代码分析
·linux驱动相关
·WinCE系统下BootLoader..
·Windows CE环境下无线网卡的..
·Windows CE中实现蓝牙串口驱..
·WinCE--嵌入式系统简介
·Windows CE OAL层的结构..
·Windows CE 软件开发入门(..
·Windows CE 软件开发入门 ..
·Windows CE 软件开发入门(..
·Windows CE开发初步教程
·使用 Windows CE .NET..
IC
IC

©2007 版权归ICGLE所有   页面执行时间:62.500毫秒