ÇöÀç°Á : UNIX ¼ÒÄÏ ÀÀ¿ë ÇÁ·Î±×·¡¹Ö ÀÌÀü 4.4 ¸ÖƼ¼¹ö ´ÙÀ½: 4.6 ³×Æ®¿÷ µ¥ÀÌÅÍ º£À̽º ¾×¼¼½º ÀÀ¿ë
4.5 ¼ÒÄÏ ÇÔ¼ö 󸮽ð£ ÃøÁ¤
¢º º» Àý¿¡¼´Â UNIX Ä¿³ÎÀÌ Á¦°øÇÏ´Â ½Ã°£ °ü·Ã ÇÔ¼öÀÇ »ç¿ë¹ý¿¡ °üÇØ ¾Ë¾Æº¸°í, À̸¦ ÀÌ¿ëÇÏ¿© °¢Á¾ ¼ÒÄÏ °ü·Ã ½Ã½ºÅÛ ÄÝÀÇ ¼öÇà¿¡ ¼Ò¿äµÇ´Â ½Ã°£À» ÃøÁ¤ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù.
4.5.1 UNIXÀÇ ½Ã°£ÃøÁ¤ ÇÔ¼ö
¢º UNIX°¡ Á¦°øÇÏ´Â ´ëÇ¥ÀûÀÎ ½Ã°£ÃøÁ¤ ÇÔ¼ö´Â time()Àε¥ time()Àº 1970³â 1¿ù 1ÀÏ 0½ÃºÎÅÍ(À̸¦ Epoch¶ó°í ÇÑ´Ù) ÇöÀç±îÁö °æ°úµÈ ½Ã°£À» ÃÊ´ÜÀ§·Î Á¤¼ö°ªÀ¸·Î ¸®ÅÏÇÑ´Ù.
¢º time() ÇÔ¼ö°¡ ¸®ÅÏÇÑ °ªÀ» Calendar timeÀ̶ó Çϴµ¥ ÀÌ´Â ÃÊ´ÜÀ§·Î ´©ÀûµÈ °ªÀ̹ǷΠ»ç¿ëÀÚ°¡ ½±°Ô ¾Ë¾Æº¼ ¼ö ÀÖ´Â °ªÀÌ ¾Æ´Ï´Ù. µû¶ó¼ ½Ã°£À» ½±°Ô ÀνÄÇÒ ¼ö ÀÖµµ·Ï Ç¥ÇöÇØ ÁÖ´Â ¿©·¯ ½Ã½ºÅÛ ÄÝÀÌ Á¦°øµÇ°í ÀÖ´Ù.
¢º ¸ÕÀú ctime() ½Ã½ºÅÛ ÄÝÀº time_t Çü Æ÷ÀÎÅ͸¦ ÀÎÀÚ·Î ¹Þ¾Æ, ³¯Â¥¿Í ½Ã°£À» ³ªÅ¸³»´Â ¹®ÀÚ¿·Î º¯È¯ÇØ ÁØ´Ù. ¿¹¸¦µé¾î ¾Æ·¡ ÇÁ·Î±×·¥ ÄÚµå´Â ÇöÀçÀÇ ³¯Â¥¿Í ½Ã°£À» ȸ鿡 Ãâ·ÂÇÑ´Ù.
#include
<time.h> void main(void) { time_t now; time(&now); printf("Now : %s", ctime(&now)); } |
¢º À§ ÇÁ·Î±×·¥ÀÇ ½ÇÇà °á°ú ¿¹´Â ´ÙÀ½°ú °°´Ù.
Now : Fri June 6 12:43:39 1997 |
¡¡
¢º ÇÑÆí ÃÊ´ÜÀ§°¡ ¾Æ´Ï¶ó nano second ´ÜÀ§ÀÇ ½Ã°£À» ÃøÁ¤Çϱâ À§Çؼ´Â clock_gettime()ÀÌ ÁÖ·Î »ç¿ëµÇ´Âµ¥ 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_gettime()ÀÇ Ã¹¹ø° ÀÎÀÚ clock_id·Î CLOCK_REALTIMEÀ» ¼±ÅÃÇÏ¿© ½Ã½ºÅÛ ÄÝÀ» È£ÃâÇÏ¸ç µÎ¹ø° ÀÎÀÚÀÎ ±¸Á¶Ã¼ timespec¿¡ January 1, 1970 00:00½Ã ÀÌÈÄÀÇ ½Ã°£ÀÌ ÃÊ´ÜÀ§¿Í nano second [nsec] ´ÜÀ§·Î ±â·ÏµÈ´Ù.
4.5.2 ¼ÒÄÏ ÇÔ¼ö 󸮽ð£ ÃøÁ¤ ÇÁ·Î±×·¥
¢º ¿©±â¼´Â ¼ÒÄÏ¿¡ °ü·ÃµÈ ¿©·¯ ÇÔ¼öµéÀ» ¼öÇàÇϴµ¥ ¼Ò¿äµÇ´Â ½Ã°£À» clock_gettime() ½Ã½ºÅÛ ÄÝÀ» ÀÌ¿ëÇÏ¿© ÃøÁ¤ÇÏ´Â ¿¹Á¦ ÇÁ·Î±×·¥ socket_delay.c¸¦ ¼Ò°³ÇÑ´Ù.
¢º ´ÙÀ½Àº socket_delay.cÀÇ ½ÇÇà °á°ú·Î socket(), connect() µîÀÇ ¼ÒÄÏ °ü·Ã ÇÔ¼ö¸¦ ½ÇÇàÇϴµ¥ °É¸®´Â ½Ã°£À» ÃøÁ¤ÇÑ °á°ú¸¦ º¸¿©ÁÖ°í ÀÖ´Ù.
# 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 # |
¢º socket_delay.c¿¡¼´Â ½Ã°£À» ÃøÁ¤Çϱâ À§ÇÏ¿© timespec ŸÀÔ º¯¼öÀÇ ¹è¿ myclock[2]¸¦ »ç¿ëÇϴµ¥ myclock[0]¿¡´Â ¾î¶² ¼ÒÄÏ ÇÔ¼ö¸¦ È£ÃâÇϱâ Á÷ÀüÀÇ ½Ã°¢À» ±â·ÏÇÏ°í myclock[1]¿¡´Â ±× ¼ÒÄÏ ÇÔ¼ö¸¦ ¼öÇàÇÑ Á÷ÈÄÀÇ ½Ã°¢À» ±â·ÏÇÑ ´ÙÀ½ À̵éÀÇ ½Ã°£Â÷À̸¦ °è»êÇØ ÁÖ´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö calclock()À» È£ÃâÇÑ´Ù.
¢º¿¹¸¦µé¾î socket() ÇÔ¼öÀÇ Ã³¸® ½Ã°£Àº ´ÙÀ½°ú °°ÀÌ ÃøÁ¤ÇÑ´Ù.
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);
¢º À§¿¡¼ calclock()Àº myclock[] ¹è¿¿¡ µé¾î ÀÖ´Â µÎ °³ÀÇ ½Ã°¢ÀÇ Â÷À̸¦ [nsec] ´ÜÀ§·Î °è»êÇÏ¿© ¸®ÅÏÇÏ´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö·Î ¾Æ·¡¿¡ calclock() Äڵ带 ³ªÅ¸³Â´Ù.
/* ¹è¿ myclock[]·ÎºÎÅÍ ½Ã°£Â÷¸¦ ±¸Çؼ ¸®ÅÏÇÑ´Ù */ long calclock (struct timespec *myclock) {
long nano_time, temp, temp_n;
if (myclock[1].tv_nsec >= myclock[0].tv_nsec) {
temp = myclock[1].tv_sec - myclock[0].tv_sec;
temp_n = myclock[1].tv_nsec - myclock[0].tv_nsec;
nano_time = 1000000000 * temp + temp_n;
} else {
temp = myclock[1].tv_sec - myclock[0].tv_sec - 1;
temp_n = 1000000000 + myclock[1].tv_nsec - myclock[0].tv_nsec;
nano_time = 1000000000 * temp + temp_n;
}
return nano_time;
}
¢º socket_delay.c ÇÁ·Î±×·¥ ¸®½ºÆ®
ÇöÀç°Á : UNIX ¼ÒÄÏ ÀÀ¿ë ÇÁ·Î±×·¡¹Ö ÀÌÀü 4.4 ¸ÖƼ¼¹ö ´ÙÀ½: 4.6 ³×Æ®¿÷ µ¥ÀÌÅÍ º£À̽º ¾×¼¼½º ÀÀ¿ë