강좌 & 팁
어떤 특정한 기능을 계속해서 반복해 오류가 발생하는지의 여부를 판단 하는 에이징 테스트를 해야 할 때가 있습니다.
이런 테스트를 할때 얼마동안 진행되다가 멈추었는지, 언제부터 시작했는지 등의 시간 정보를 간단히 확인해 보는
방법을 써볼까 합니다.
물론 이 방법이 꼭 이게 좋다 효율적이다 이게 맞다.. 뭐 이런건 아닙니다.ㅎ.
/*여기서부터**********************************************************************
#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초동안 실행 하고 멈추었습니다.
아주 간단한 방식이긴 하지만. 특정기능을 일정시간동안 테스트 할때는 유용하다고 생각 됩니다.