콘텐츠로 건너뛰기

c에서 정밀하게 시간 구하기

  • 기준






gettimeofday 란 함수가 있습니다.
http://man.kldp.org/man/man2/gettimeofday.2.html

두가지 인터넷에 찾은 예제.
1) http://khdp.org/docs/trans_doc/phrack-51-11.txt

* connect()함수를 이용해서 닫힌 포트에 갔다가 돌아오는 시간을 계산한
다. 더 좋은 방법은 ping을 쓰면 된다. 이 ping은
방화벽까지 갈 수 있고 root권한을 가진 사용자가 isup()이라는 함수를 사
용해서 쓸 수 있다. */
unsigned long calculate_sleep(struct in_addr target) {
struct timeval begin, end;
int sd;
struct sockaddr_in sock;
int res;

if ((sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
{perror(“Socket troubles”); exit(1);}

sock.sin_family = AF_INET;
sock.sin_addr.s_addr = target.s_addr;
sock.sin_port = htons(MAGIC_PORT);

gettimeofday(&begin, NULL);
if ((res = connect(sd, (struct sockaddr *) &sock,
sizeof(struct sockaddr_in))) != -1)
printf(“You might want to change MAGIC_PORT in the include file, it
seems to be listening on the target host!\n”);
close(sd);
gettimeofday(&end, NULL);
if (end.tv_sec – begin.tv_sec > 5 ) /*uh-oh!*/
return 0;
return (end.tv_sec – begin.tv_sec) * 1000000 + (end.tv_usec –
begin.tv_usec);
}

2) http://www.bomulsun.com/c/tip/brd_view.html?no=50
1/10000초를 구하는 함수

UNIX에서 DB를 사용할 때 시간을 PK로 사용하는 경우가 많죠.
요즈음은 H/W 성능이 워낙 좋아져서 동일 시간(초)에 발생하는
Event가 많습니다. 그래서 더욱 세분화해서 System time을
구해야 할 필요가 있습니다.
그럴경우에 사용하면 좋은 함수를 하나 만들었죠.

void vMkCurTime ( buf )
char *buf;
{
      struct timeval sCurTimeVal;
      struct tm *sTm;

      gettimeofday (&sCurTimeVal, NULL);

      sTm = localtime(&sCurTimeVal.tv_sec);

      sprintf ( buf, “%04d%02d%02d%02d%02d%02d%04d”,
          sTm->tm_year+1900, sTm->tm_mon+1, sTm->tm_mday,
          sTm->tm_hour, sTm->tm_min, sTm->tm_sec,    
          sCurTimeVal.tv_usec/100);
}

위 함수 중에서 초단위 이하 시간은 “sCurTimeVal.tv_usec/100″를
통해서 구해지는 데요….
더 세밀한 시간이 필요한 경우에는 “sCurTimeVal.tv_usec”를 그냥
사용하면 됩니다.

그리고 타임 관련된 메크로
http://www.ezdoum.com/upload/time.h

리눅스와 Windows 2000 에서의 고성능 프로그래밍 기술
타이밍 루틴 (timing routine)
http://www-903.ibm.com/developerworks/kr/linux/library/l-rt1.html

THE GNU C LIBRARY REFERANCE MANUAL의 시간관련 부분
http://database.sarang.net/study/glibc/17.htm
(경과된 CPU 시간을 계산
절대시각이나 달력시간 계산
알람과 타이머 설정)




답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다