用C来读取Solaris上的Load Average的三个值

    OS中的Load Average是很有用的信息,在原先的版本中是没有的,今日增加了这个信息.

......
OS Load: 2.37 2.56 2.56
......

    有了这些信息后,可以使这些工具更具有价值. 源程序来自这儿, 在这儿我也抄了一份.

#include <sys/param.h>
#include <kstat.h>
#include <string.h>
#include <stdio.h>

main(void)
{
  int i;
  kstat_ctl_t *kc;
  kstat_t *ksp;
  kstat_named_t *kn1,*kn5,*kn15;

  if ((kc = kstat_open()) == 0)
  {
    perror("kstat_open");
    exit(1);
  }

  if (( ksp = kstat_lookup(kc, "unix", 0, "system_misc")) == 0)
  {
    perror("kstat_lookup");
    exit(1);
  }

  for(i = 0; i < 15; i++)
  {
    if (kstat_read(kc, ksp,0) == -1)
    {
      perror("kstat_read");
      exit(1);
    }
    if ((kn1 = kstat_data_lookup(ksp, "avenrun_1min")) == 0)
    {
      fprintf(stderr,"avenrun_1min not found by kstat\n");
      exit(1);
    }
    if ((kn5 = kstat_data_lookup(ksp, "avenrun_5min")) == 0)
    {
      fprintf(stderr,"avenrun_5min not found by kstat\n");
      exit(1);
    }
    if ((kn15 = kstat_data_lookup(ksp, "avenrun_15min")) == 0)
    {
      fprintf(stderr,"avenrun_15min not found by kstat\n");
      exit(1);
    }

    printf("Load:\t1-Min: %.2f\t5-Min: %.2f\t15-Min: %.2f\n",
        (double)kn1->value.ul/FSCALE,
        (double)kn5->value.ul/FSCALE,
        (double)kn15->value.ul/FSCALE);
    sleep(60);
  }
 
  exit(0);
}

发表留言: