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 시간을 계산
절대시각이나 달력시간 계산
알람과 타이머 설정)