ÇöÀç°­Á : 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 ³×Æ®¿÷ µ¥ÀÌÅÍ º£À̽º ¾×¼¼½º ÀÀ¿ë