어떤 특정한 기능을 계속해서 반복해 오류가 발생하는지의 여부를 판단 하는 에이징 테스트를 해야 할 때가 있습니다.

이런 테스트를 할때 얼마동안 진행되다가 멈추었는지, 언제부터 시작했는지 등의 시간 정보를 간단히 확인해 보는

방법을 써볼까 합니다.

물론 이 방법이 꼭 이게 좋다 효율적이다 이게 맞다.. 뭐 이런건 아닙니다.ㅎ.

 

/*여기서부터**********************************************************************

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <time.h>

 /*-----------------------------------------------------------------------------

  설 명 : 초 값을 날짜-시간 으로 출력해 주는 함수

  주 의 :

-------------------------------------------------------------------------------*/

char* timeToString(struct tm *t) 

{

  static char s[20];

 

  sprintf(s, "%04d-%02d-%02d %02d:%02d:%02d",

              t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,

              t->tm_hour, t->tm_min, t->tm_sec

          );

 

  return s;

}

 

/*-----------------------------------------------------------------------------

  설 명 : test 함수

  주 의 :

-------------------------------------------------------------------------------*/

int test(void)

{

//뭔가 테스트 한다.

//정상이면 0 을 리턴한다.

return 0;

}

/*-----------------------------------------------------------------------------

  설 명 : test 프로그램 main 함수

  주 의 :

-------------------------------------------------------------------------------*/

int main(int argc, char *argv[])

{

int error = 1;


struct tm *t;


time_t aging_time;

time_t start_timer;

time_t now_timer;


 //동작할 시간값을 얻어온다.

aging_time = strtoul( argv[1], NULL, 0 );

start_timer = time(NULL);    // 현재 시각을 초 단위로 얻기

t = localtime(&start_timer); // 초 단위의 시간을 분리하여 구조체에 넣기

printf("aging time : %ld sec \n",aging_time);

printf("start time : %s\n", timeToString(t)); //시작 시간 출력

  

while(error)

{

now_timer = time(NULL);    // 현재 시각을 초 단위로 얻기

t = localtime(&now_timer); // 초 단위의 시간을 분리하여 구조체에 넣기

//정상이면 뭔가 한다.

if(!test())

{

//printf(".");

}

//오류면 시간을 출력 하고 멈춘다.

else

{

printf("[error time : %s]\n", timeToString(t));

error = 0;// 멈춘다.

}

//설정한 aging 시간이 넘어가면 멈춘다.

if((now_timer - start_timer)==aging_time)

{

printf("end time : %s\n", timeToString(t));

error = 0;

}

}

    printf("------------- end program \n");

 

return 0;

}

-------------------------------------------------------------------- 여기 까지--------------

코드를 간략히 설명하자면..

프로그램을 실행 할때 인자로 테스트를 진행할 시간을 초단위로 받고,

테스트 함수를 그 시간동안 반복하다가 에러가 나면 에러가난 시간을 출력하고

멈춥니다.

만약 에러가 없으면, 설정한 시간 동안 동작하고 종료 시간을 출력 합니다.

 

컴파일 하고 실행시켜 보겠습니다.

-------------------------------------------------------------------------

root@eabi:/staff/r2adve/E13-0131_선성태/test_prg/time# ls

main.c

root@eabi:/staff/r2adve/E13-0131_선성태/test_prg/time# 

root@eabi:/staff/r2adve/E13-0131_선성태/test_prg/time# gcc -o app main.c

root@eabi:/staff/r2adve/E13-0131_선성태/test_prg/time# ls

app  main.c

root@eabi:/staff/r2adve/E13-0131_선성태/test_prg/time# 

-------------------------------------------------------------------------

 

실행

-------------------------------------------------------------------------

root@eabi:/staff/r2adve/E13-0131_선성태/test_prg/time# ./app 2

aging time : 2 sec 

start time : 2013-05-09 21:54:19

end time : 2013-05-09 21:54:21

------------- end program 

root@eabi:/staff/r2adve/E13-0131_선성태/test_prg/time# 

-------------------------------------------------------------------------

2초동안 실행 하고 멈추었습니다.

 

아주 간단한 방식이긴 하지만. 특정기능을 일정시간동안 테스트 할때는 유용하다고 생각 됩니다.