Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

설명

리눅스/솔라리스 시스템의 부팅후 경과된 시간을 초단위로 얻어옵니다. 부팅시간은 /proc/uptime의 값을 이용해서 계산합니다. 부팅경과 시간은 단순히 시스템의 부팅 시간을 얻어오는 것 외에도 프로세스의 CPU사용율 등을 계산하기 위한 용도로도 사용됩니다.

사용방법

int uptime();
  1. 리턴값 : 실패했을 경우 -1을 그렇지 않을경우 0보다 큰값을 리턴
int main()
{
    time_t cutime = uptime();
    time_t starttime = time((time_t *)NULL)  - cutime;
    printf("Uptime is %d sec\n", (unsigned int)cutime);
    printf("Booting time is %s\n",time2str(starttime, "y/m/d/ D h:mi:s"));
    return 0;
}

다음은 출력 결과입니다.
# ./uptime 
Uptime is 55489 sec
Booting time is 2004/02/01/ 일 01:50:42

<!> time2str 함수는 time2str을 참고하기 바랍니다.

코드

#include <stdio.h>
#include <time.h>
#include "time2str.h"

#ifdef _SOLARIS_
#include <kstat.h>
#endif

#include <stdio.h>

int uptime()
{
  double stime;
  double idletime;
#ifdef _LINUX_
  char buf[36];
  FILE *fp;
  if ((fp = fopen("/proc/uptime", "r")) == NULL)
  {
    return -1;
  }

  fgets(buf, 36, fp);
  sscanf(buf, "%lf %lf", &stime, &idletime);
  fclose(fp);

  return (int)stime;
#endif

#ifdef _SOLARIS_
  kstat_ctl_t *kc;
  kstat_t *ks;
  kid_t kid;
  kstat_named_t *named;
  int i;

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

  ks = kstat_lookup(kc, "unix", -1, "system_misc");
  kid = kstat_read(kc, ks, NULL);
  named = kstat_data_lookup(ks, "lbolt");
  return (named->value.ul)/100;
#endif
}

컴파일

  • Solaris에서 컴파일 할경우 kstat를 링크시켜주어야 한다.
    # gcc -o test uptime.c -lksat -D_SOLARIS_

변경사항

  1. 솔라리스에 사용가능하도록 변경 : 2005/05/12