clock_gettime에 대한 자료
자료 출처 : http://cafe.naver.com/segame/102
세마포에time out 걸려다가 여기까지 옴... ㅡㅡ;
** clock_gettime()을 사용
- #include <time.h>
- link시 -lrt 추가
3.7 소켓 함수 처리시간 측정
3.7.1 유닉스의 시간측정 함수
▶ time() 함수는 1970년 1월 1일 0시부터(이를 Epoch라고 한다) 현재까지 경과
된 시간을 초단위로 정수값으로 리턴한다.
▶ ctime()은 time_t 타입의 포인터를 인자로 받아, 날짜와 시간을 나타내는 문자
열로 변환해 준다. 아래 프로그램 코드는 현재의 날짜와 시간을 화면에 출력한다.
#include <time.h>
void main(void) {
time_t now;
time(&now);
printf("Now : %s", ctime(&now));
}
▶ 위 코드의 실행 결과 예는 다음과 같다.
Now : Wed Dec 8 12:43:39 1999
▶ nano second 단위의 시간을 측정하기 위해서는 clock_gettime()을 사용한다.
#include <time.h>
int clock_gettime(clockid_t clock_id, struct timespec *tp);
typedef struct timespec
{
time_t tv_sec; /* second (초) 단위 */
long tv_nsec; /* nano second 단위 */
} timespec_t;
▶ 첫번째 인자 clock_id로 CLOCK_REALTIME을 선택하면, 두번째 인자인 구조체
timespec에 January 1, 1970 00:00시 이후의 시간이 초단위와 nano second 단위로 리턴된
다.
3.7.2 소켓 함수 처리시간 측정 프로그램
■ socket_delay.c
● 소켓 관련 함수들을 실행하는데 소요되는 시간을 clock_gettime()을 이용하여 측
정한다.
●실행예
> socket_delay
For 'socket' call : 8045500 nsec
For 'connect' call : 3622500 nsec
For 'write' call : 222000 nsec
For 'read' call : 23732000 nsec
For 'close' call : 657500 nsec
●시간을 측정하기 위하여 timespec 타입 변수의 배열 myclock[2]를 사용하는데
myclock[0]에는 어떤 소켓 함수를 호출하기 직전의 시각을 기록하고 myclock[1]에
는 그 소켓 함수를 수행한 직후의 시각을 기록한 다음 이들의 시간차이를 계산해 주
는 사용자 정의 함수 calclock()을 호출한다.
struct timespec myclock[2];
long nano_time;
clock_gettime(CLOCK_REALTIME, &myclock[0]);
s = socket(PF_INET, SOCK_STREAM, 0);
clock_gettime(CLOCK_REALTIME, &myclock[1]);
nano_time = calclock( myclock );
printf("For 'socket' call :%10ld nsec \n", nano_time);
●프로그램 리스트
/*---------------------------------------------- long calclock (struct timespec *myclock); /* 시간 차이를 계산하는 함수 */ int main(int argc, char *argv[]) { /* ----- socket() 처리시간 측정 --------------- */ /* -------- connect() 처리시간 측정 ---------- */ /* ------- write() 처리시간 측정 --------------- */ timedelay = calclock( myclock ); |
'프로그래밍???' 카테고리의 다른 글
Perl로 시간 처리하기 (0) | 2012.04.06 |
---|---|
linux에서 mutex를 재귀적으로 사용하는 방법 (0) | 2012.03.26 |
FIFO 사용에 대한 오류 및 문제 (0) | 2011.08.02 |
mkdir -p 옵션 구현 (0) | 2011.06.17 |
Eclipse CDT에서 Fork 테스트하는 방법 (0) | 2011.06.09 |