ÀÌ ÀýÀº ÇöÀçÀÇ ½Ã°£°ú, ´Ù¸£°Ô ½Ã°£À» Ç¥ÇöÇÏ´Â ¹æ¹ýµé »çÀÌÀÇ ÀüȯÀ» °áÁ¤ÇÏ´Â ÇÔ¼öµéÀ» Æ÷ÇÔÇÏ¿©, ³¯Â¥¿Í ½Ã°£µéÀ» À§ÇÑ ÇÔ¼öµéÀ» ¼³¸íÇϰí ÀÖ´Ù. ½Ã°£ ÇÔ¼öµéÀº ¼¼°¡Áö ÁÖ¿äÇÑ ¹üÁÖ·Î ³ª´µ¾îÁø´Ù.
o °æ°úµÈ CPU ½Ã°£À» °è»êÇÏ´Â ÇÔ¼öµéÀº 17.1Àý [Processor Time], 233 ÆäÀÌÁö¿¡¼ ³íÀǵǾú´Ù.
o Àý´ë ½Ã°¢À̳ª ´Þ·Â ½Ã°£À» °è»êÇÏ´Â ÇÔ¼öµéÀº 17.2Àý [Calendar Time]235 ÆäÀÌÁö ¿¡¼ ³íÀǵǾú´Ù.
o ¾Ë¶÷°ú ŸÀ̸Ӹ¦ ¼³Á¤ÇÏ´Â ÇÔ¼öµéÀº 17.3Àý [Setting an Alarm] 243ÆäÀÌÁö¿¡¼ ³í ÀǵǾú´Ù.
17.1 ÇÁ·Î¼¼¼ ŸÀÓ.
¸¸ÀÏ ´ç½ÅÀÌ ´ç½ÅÀÇ ÇÁ·Î±×·¥À» ÃÖÀûÈÇϰųª, ¶Ç´Â ±× È¿À²¼ºÀ» °è»êÇÏ·ÁÇÑ´Ù¸é, ¾î´À ÁÖ¾îÁø ÁöÁ¡
ÀÌÈÄ¿¡, ¾ó¸¶³ª ¸¹Àº ÇÁ·Î¼¼¼ ½Ã°£°ú CPU ½Ã°£ÀÌ Èê·¶´ÂÁö¸¦ ¾Ë¼öÀÖµµ·Ï ÇÏ´Â À¯¿ëÇÑ ¹æ¹ýÀÌ ÀÖ
´Ù. ÇÁ·Î¼¼¼ ½Ã°£Àº º®½Ã°è¿Í´Â ´Ù¸¥µ¥, ±×°ÍÀº º®½Ã°è°¡ ÀÔ/Ãâ·ÂÀ̳ª ´Ù¸¥ ¾î¶² ÇÁ·Î¼¼½º°¡ µ¿ÀÛ
Çϰí ÀÖ´Â µ¿¾È ¾ó¸¶³ª ½Ã°£ÀÌ Èê·¶´ÂÁö¸¦ ¾Ë¸®Áö ¾Ê±â ¶§¹®ÀÌ´Ù. ÇÁ·Î¼¼¼ ½Ã°£Àº µ¥ÀÌÅÍ Å¸ÀÔ
clock_t·Î Ç¥ÇöµÇ°í, ´ÜÀÏÇÑ ÇÁ·Î±×·¥ÀÇ ½ÃÀÛÁ¡¿¡¼ Ç¥½ÃµÈ ¾î¶² ±âÁØ ½Ã°£°ú ¿¬°üµÈ ½Ã°£ÀÇ È帧À»
¼ýÀڷΠǥÇöÇÑ´Ù.
17.1.1 ±âÁØ CPU ½Ã°£ Á¶»ç.
ÇÁ·Î¼¼½º¿¡ ÀÇÇØ »ç¿ëµÈ, °æ°úµÈ CPU ½Ã°£À» ¾ò±â À§Çؼ´Â, ´ç½ÅÀº clockÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÌ ÇÔ¼ö´Â Çì´õÆÄÀÏ 'time.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
Ưº°ÇÑ »ç¿ë¿¹·Î, ´ç½ÅÀÌ ½ÃÀÛÁ¡°ú ³¡Á¡ »çÀÌÀÇ ½Ã°£ÀÇ °£°ÝÀ» ±¸ÇÒ·Á¸é,clockÇÔ¼ö¸¦ È£ÃâÇϰí, ±×
°ªµéÀ» ³ªÁß°ª¿¡¼ óÀ½°ªÀ» »©°í, ±×¸®°í CLOCKS_PER_SEC·Î ³ª´©¾î¶ó( ÃÊ´ç Ƚ¼ö(clock ticks)
ÀÇ ¼ýÀÚ¸¦ ¾ò±â À§Çؼ ), ´ÙÀ½ ÇÁ·Î±×·¥Ã³·³.
#include <time.h>
clock_t start, end;
double elapsed;
start = clock();
. . .
/* ¸ÕÀú ÀÏÀ» ½ÃÀÛÇϱâ Àü¿¡ clockÇÔ¼ö¸¦ È£ÃâÇÑ ´ÙÀ½ ´ç½ÅÀÌ °æ°úµÈ ½Ã°£À» ¾ò±â ¿øÇÏ´Â ±× ÀÏÀ»
½ÃÀÛÇ϶ó */
end = clock();
elapsed = ((double) (end - start)) / CLOCKS_PER_SEC;
´Ù¸¥ ÄÄÇ»ÅÍ¿Í ¿î¿µÃ¼Á¦¿¡¼ ¾î¶»°Ô ÇÁ·Î¼¼¼ ½Ã°£À» ±â¾ïÇÏ´ÂÁö´Â ¸Å¿ì ±¤¹ýÀ§ÇÑ ¹®Á¦ÀÌ´Ù. 100
ºÐÀÇ 1Ãʳª, 100¸¸ºÐÀÇ 1ÃÊ »çÀÌÀÇ ³»ºÎÇÁ·Î¼¼½º ½Ã°è¸¦ °®´Â °ÍÀÌ º¸ÅëÀÌ´Ù.
GNU ½Ã½ºÅÜ¿¡¼ clock_t´Â long int ¿Í µ¿µîÇϰí, CLOCKS_PER_SEC´Â Á¤¼ö °ªÀÌ´Ù. ±×·¯³ª ´Ù
¸¥ ½Ã½ºÅÛ¿¡¼´Â, clock_t´Â Á¤¼öÀ̰í, ¸ÅÅ©·Î CLOCKS_PER_SEC´Â ÇÃ·ÎÆÃ-Æ÷ÀÎÆ® ÇüÀ¸·Î ¼·Î ´Ù
¸£´Ù. ¾î¶² ½Ã½ºÅÛÇÏ¿¡ ³õ¿©ÀÖµçÁö »ó°ü¾øÀÌ Àû´çÇÏ°Ô ÀÛ¾÷À» ¼öÇàÇϰí, »ê¼úÀûÀ¸·Î ±× ¸í·ÉÀ» È®ÀÎ
Çϱâ À§Çؼ´Â ¾Æ·¡ÀÇ ¿¹Ã³·³ doubleÇüÀ¸·Î ÇÁ·Î¼¼½º ŸÀÓÀ» cast¿¬»êÀ» ÅëÇØ¼ Çüº¯È¯À» Ç϶ó.
¸ÅÅ©·Î : int CLOCKS__PER__SEC
ÀÌ ¸ÅÅ©·Î´Â clock ÇÔ¼ö¿¡ ÀÇÇØ °è»êµÈ ÃÊ´ç ½Ã°£ÁÖ±â(clock ticks)ÀÇ ¼ö¸¦ ³ªÅ¸³»´Â °ªÀÌ´Ù.
¸ÅÅ©·Î : int CLK__TCK
À̰ÍÀº ¿¿³¯¿¡ CLOCKS_PER_SEC ´ë½Å¿¡ ¾²ÀÌ´ø °ÍÀÌ´Ù.
µ¥ÀÌÅÍŸÀÔ : clock__t
À̰ÍÀº clockÇÔ¼ö¿¡ ÀÇÇØ ¸®ÅÏµÈ °ªÀÇ ÇüÀ¸·Î ½Ã°£ÁÖ±âÀÇ ´ÜÀ§ÀÌ´Ù.
ÇÔ¼ö : clock_t clock(void)
ÀÌ ÇÔ¼ö´Â °æ°úµÈ ÇÁ·Î¼¼¼ ½Ã°£À» ¸®ÅÏÇÑ´Ù. ±âÁØ ½Ã°£Àº Ç×»ó ´Ù¸£Áö¸¸, ´ÜÀÏ ÇÁ·Î¼¼½º ¾È¿¡¼´Â
º¯°æµÇÁö ¾Ê´Â´Ù. ¸¸ÀÏ ±× ÇÁ·Î¼¼¼ ½Ã°£ÀÌ À¯¿ëÇÏÁö ¾Ê°Å³ª Ç¥ÇöµÉ ¼ö ¾ø´Ù¸é, clock´Â
(clock_t)(-1)ÀÇ °ªÀ» ¸®ÅÏÇÑ´Ù.
17.1.2 ÀÚ¼¼ÇÏ°Ô °æ°úµÈ CPU ½Ã°£¿¡ ´ëÇÑ Á¶»ç.
times ÇÔ¼ö´Â °æ°úµÈ ÇÁ·Î¼¼¼ ½Ã°£¿¡ ´ëÇØ¼ struct tms¿ÀºêÁ§Æ®·Î ´õ »ó¼¼ÇÑ Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù.
ÀÌ ÇÔ¼ö´Â Çì´õÆÄÀÏ `sys'times.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : struct tms
tms±¸Á¶Ã¼´Â ÇÁ·Î¼¼½º ½Ã°£µé¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϴµ¥ »ç¿ëµÈ´Ù. ±×°ÍÀº Àû¾îµµ ´ÙÀ½°ú °°Àº ¸â¹ö
µéÀ» Æ÷ÇÔÇϰí ÀÖ´Ù.
clock_t tms_utime
À̰ÍÀº È£ÃâµÈ ÇÁ·Î¼¼½ºÀÇ ¸í·ÉµéÀ» ¼öÇàÇϴµ¥ »ç¿ëµÈ CPU ½Ã°£ÀÌ´Ù.
clock_t tms_stime
À̰ÍÀº È£ÃâµÈ ÇÁ·Î¼¼½º ¶§¹®¿¡ ½Ã½ºÅÛ¿¡¼ »ç¿ëµÈ CPU ½Ã°£ÀÌ´Ù.
clock_t tms_cutime
À̰ÍÀº wait ¶Ç´Â, waitpid¿¡ ÀÇÇØ ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô º¸°íµÈ »óȲÀ¸·Î, È£ÃâµÈ ÇÁ·Î¼¼½ºÀÇ ¸ðµç
Á¾·áµÈ ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀÇ tms_utime °ú tms_cutimeÀÇ °ªµéÀ» ÇÕÇÑ °ªÀÌ´Ù; 23.6Àý [Process
Completion] 329 ÆäÀÌÁö ÂüÁ¶. Áï, È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ ¸ðµç Á¾·áµÈ ÀÚ½Ä ÇÁ·Î¼¼½º ÀÇ ¸í·ÉÀ» ¼öÇàÇÏ
´Âµ¥ »ç¿ëµÈ ÃÑ CPU ½Ã°£À» ³ªÅ¸³½´Ù.
clock_t tms_cstime
À̰ÍÀº tms_cutime°ú À¯»çÇÏÁö¸¸, È£ÃâµÈ ÇÁ·Î¼¼½ºÀÇ ¸ðµç Á¾·áµÈ ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀ» À§ÇÏ¿© ½Ã½ºÅÛ
¿¡¼ »ç¿ëµÈ ÃÑ CPU ½Ã°£À» ³ªÅ¸³½´Ù.
¸ðµç ½Ã°£µéÀº ½Ã°£ÁÖ±â(clock ticks)·Î ÁÖ¾îÁø´Ù. À̵éÀº Àý´ë°ªÀÌ´Ù; »õ·ÎÀÌ ¸¸µé¾îÁø ÇÁ·Î¼¼½º¿¡
¼, ±×µéÀº ¸ðµÎ 0ÀÌ´Ù. 23.4 [Creatina a Precess] 326 ÆäÀÌÁö ÂüÁ¶.
ÇÔ¼ö : clock_t times (struct tms *buffer)
times ÇÔ¼ö´Â È£ÃâµÈ ÇÁ·Î¼¼½º¸¦ À§ÇÑ ÇÁ·Î¼¼¼ ½Ã°£ Á¤º¸¸¦ buffer¿¡ ÀúÀåÇÑ´Ù. ¸®ÅϰªÀº clock()
ÀÇ °ª°ú µ¿ÀÏÇÏ´Ù: ¾î¶²±âÁØ ½Ã°£¿¡¼ ½ÇÁ¦·Î °æ°úµÈ ½Ã°£. ±âÁØ ½Ã°£Àº ¾î¶² Ưº°ÇÑ ÇÁ·Î¼¼½º »ó
¿¡¼´Â º¯ÇÏÁö ¾Ê´Â »ó¼ö°ªÀ̰í, ½Ã½ºÅÛ ½ÃÀ۽ð£°ú ¿¬±µÈ ½Ã°£À¸·Î Ç¥ÇöÇÑ´Ù. ½ÇÆÐ¸¦ Çϸé
(clock_t)(-1)ÀÇ °ªÀ» ¸®ÅÏÇÏ´Ù.
À̽ļº ³ëÆ®: 17.1.1Àý [Basic CPU Time] ÆäÀÌÁö 233¿¡¼ ¼³¸íµÈ clock ÇÔ¼ö´Â, ANSI C Ç¥ÁØÇÔ¼ö
À̰í, times ÇÔ¼ö´Â POSIX.1ÀÇ ÇÔ¼öÀÌ´Ù. GNU ½Ã½ºÅÛ¿¡¼´Â, clockÇÔ¼ö·Î Ç¥ÇöµÈ °ªÀº times¿¡ ÀÇ
ÇØ ¸®ÅÏµÈ tms_utime °ú tms_stimeÀÇ ÇÕ°è¿Í µ¿µîÇÑ °ªÀÌ´Ù.
17.2 ´Þ·Â ½Ã°£.
ÀÌÀýÀº ±×·¹°í¸®¿À ·Â¿¡ ÀÇÇÑ ³¯Â¥¿Í ½Ã°£µéÀ» ±â¾ïÇϱâ À§ÇÑ µµ±¸µéÀ» ¼³¸íÇϰí ÀÖ´Ù.
³¯Â¥¿Í ½Ã°£ Á¤º¸¸¦ À§ÇÑ ¼¼°¡Áö Ç¥Çö¹æ¹ýÀÌ´Ù.
o ´Þ·Â ½Ã°£( µ¥ÀÌÅÍ Å¸ÀÔ time_t)Àº °£´ÜÈ÷ ¾î¶² Á¤ÇØÁø ±âÁؽð£ ÀÌÈÄ ¸îÃʰ¡ Èê
·¶´ÂÁö¸¦ ¼ýÀڷΠǥÇöÇÑ´Ù.
o ¶ÇÇÑ Ãʸ¦ ¹Ì¼¼ÇÏ°Ô ³ª´©¾î¼ Ç¥ÇöÇÏ´Â °íÇØ»óµµ ½Ã°£ Ç¥ÇöÀÌ ÀÖ´Ù (µ¥ÀÌÅÍ Å¸ÀÔ
struct timeval). ´ç½ÅÀÌ Å« Á¤¹Ðµµ¸¦ ÇÊ¿ä·Î ÇÒ ¶§ º¸ÅëÀÇ ´Þ·Â ½Ã°£´ë½Å ÀÌ ½Ã°£
Ç¥ÇöÀ» »ç¿ëÇ϶ó.
o Áö¿ª ½Ã°£À̳ª broken-down time( µ¥ÀÌÅÍŸÀÔ struct tm)Àº Á¤ÇØÁø ½Ã°£ ±¸¿ª¿¡¼
Á¤ÇØÁø ³â, ´Þ, µî µîÀÇ ±¸¼º¿ä¼ÒµéÀÇ ÁýÇÕÀ¸·Î ³¯Â¥¿Í ½Ã°£À» Ç¥ÇöÇÑ´Ù. ÀÌ ½Ã°£
Ç¥ÇöÀº º¸Åë Çü½ÄÈµÈ ³¯Â¥¿Í ½Ã°£ °ªµéÀ» °áÇÕÇϴµ¥ »ç¿ëµÈ´Ù.
17.2.1 °£´ÜÇÑ ´Þ·Â ½Ã°£.
ÀÌ ÀýÀº ´Þ·Â ½Ã°£À» Ç¥ÇöÇϱâ À§ÇÑ µ¥ÀÌÅÍ Å¸ÀÔ time_t¿Í ´Þ·Â ½Ã°£ ¿ÀºêÁ§Æ®¿¡¼ µ¿ÀÛÇÏ´Â ÇÔ¼ö
µéÀ» ¼³¸íÇÑ´Ù. ÀÌ µµ±¸µéÀº Çì´õÆÄÀÏ `time.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : time_t
À̰ÍÀº ´Þ·Â ½Ã°£À» Ç¥ÇöÇϱâ À§Çؼ »ç¿ëÇÏ´Â µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù. GNU C ¶óÀ̺귯¸®¿Í ´Ù¸¥
POSIX-°è¿¿¡¼, time_t´Â long int ¿Í °°´Ù. Àý´ë½Ã°£°ªÀ¸·Î ÇØ¼®µÉ ¶§, ±×°ÍÀº ÇùÁ¤ ¼¼°è ½Ã°£
1970³â 1¿ù 1ÀÏ 00:00:00 ½Ã°£ ÀÌÈÄ °æ°úµÈ ÃÊÀÇ ¼ö¸¦ Ç¥ÇöÇÑ´Ù. ( ÀÌ ³¯Â¥´Â ¶§¶§·Î ½Ã´ë(epoch)·Î
½á »ç¿ëµÈ´Ù. ) ´Ù¸¥ ½Ã½ºÅÛ ¿¡¼, time_t´Â Á¤¼öÀ̰ųª ÇÃ·ÎÆÃ-Æ÷ÀÎÆ®À̰ųª ÇÒ °ÍÀÌ´Ù.
ÇÔ¼ö : double difftime (time_t time1, time_t time0)
difftime ÇÔ¼ö´Â double ÇüÀ¸·Î time1°ú time2 »çÀÌÀÇ °æ°úµÈ ½Ã°£À» ÃÊ·Î ¸®ÅÏÇÑ´Ù. GNU ½Ã½ºÅÛ¿¡
¼, ´ç½ÅÀº °£´ÜÈ÷ time_t °ªµéÀ» »©´Â °ÍÀ¸·Î ±× °ªÀ» ±¸ÇÒ ¼ö ÀÖÁö¸¸, ´Ù¸¥ ½Ã½ºÅÛ¿¡¼´Â time_t
µ¥ÀÌÅÍ Å¸ÀÔÀº Á÷Á¢ÀûÀ¸·Î »©±â¸¦ ÇÒ ¼ö°¡ ¾ø°Ô, ±âÈ£¿Í µÇÀÖÀ» °ÍÀÌ´Ù.
ÇÔ¼ö : time_t time (time_t *result)
time ÇÔ¼ö´Â time_tÀÇ ÇüÀ¸·Î Ç¥ÇöµÈ °ªÀ¸·Î ÇöÀçÀÇ ½Ã°£À» ¸®ÅÏÇÑ´Ù. ¸¸ÀÏ Àμö result°¡ ³Î Æ÷ÀÎ
ÅͰ¡ ¾Æ´Ï¶ó¸é, time°ªÀº *result¿¡ ÀúÀåµÇ¾îÁø´Ù. ¸¸ÀÏ ´Þ·Â ½Ã°£ÀÌ À¯¿ëÇÏÁö ¾Ê´Ù¸é, (time_t)(-1)
ÀÌ ¸®ÅϵȴÙ.
17.2.2. °íÇØ»óµµ ´Þ·Â.
time_t µ¥ÀÌÅÍ Å¸ÀÔÀº ¿ÀÁ÷ 1ÃÊ »çÀÌÀÇ ÇØ»óµµ¸¦ °®´Â ´Þ·Â ½Ã°£µéÀ» Ç¥ÇöÇϱâ À§ÇØ »ç¿ëÇÑ´Ù. ¾î
¶² ÀÀ¿ëÇÁ·Î±×·¥Àº ´õ Á¤¹ÐÇÒ Çʿ䰡 ÀÖ´Ù.
±×·¡¼, GNU C ¶óÀ̺귯¸® ¿¡¼´Â 1ÃÊ º¸´Ù ´õ ³ôÀº °íÇØ»óµµÀÇ ´Þ·Â½Ã°£À» Ç¥ÇöÇÒ ¿ë·®ÀÌ ÀÖ´Â
ÇÔ¼öµéÀ» °®°í ÀÖ´Ù. ÀÌ Àý¿¡¼ ¼³¸íÇϰí ÀÖ´Â ÇÔ¼öµé°ú ¿¬°üµÈ µ¥ÀÌÅÍ Å¸ÀÔµéÀº `sys/time.h'¿¡ ¼±
¾ðµÇ¾î ÀÖ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : struct timeval
±¸Á¶Ã¼ struct timevalÀº ´Þ·Â ½Ã°£À» Ç¥ÇöÇÑ´Ù. ±×°ÍÀº ´ÙÀ½°ú °°Àº ¸â¹öµéÀ» °®°í ÀÖ´Ù.
long int tv_sec
À̰ÍÀº epoch ÀÌÈĸ¦ ÃÊ(second)·Î Ç¥ÇöÇÑ´Ù. À̰ÍÀº º¸Åë time_t °ª°ú µ¿ÀÏÇÏ´Ù.
long int tv_usec
À̰ÍÀº ¸¶ÀÌÅ©·ÎÃÊ(microsecond)·Î Ç¥ÇöµÈ ½Ã°£°ªÀÌ´Ù. ¾î¶² ½Ã°£ struct timeval °ªµéÀº ½Ã°£ °£°Ý
µéÀ» À§ÇÑ »ç¿ëÀÚÀ̰í, ±×·¯¸é tv_sec ¸â¹ö´Â °£°Ý¿¡¼ °æ°úµÈ ÃÊ(second) À̰í, tv_usec´Â ºÎ°¡ÀûÀ¸
·Î È帥 ½Ã°£ ¸¶ÀÌÅ©·ÎÃÊÀÇ ¼öÀÌ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : struct timezone
±¸Á¶Ã¼ struct timezone´Â Áö¿ª ½Ã°£ ´ë¿¡ ´ëÇÑ ÃÖ¼ÒÀÇ Á¤º¸¸¦ ÀúÀåÇϱâÀ§ÇØ »ç¿ëµÈ´Ù. ±×°ÍÀº ´ÙÀ½
ÀÇ ¸â¹öµéÀ» °®´Â´Ù.
int tz_minuteswest
À̰ÍÀº ±×¸®´ÏÄ¡ Ç¥ÁؽÃ(GMT)ÀÇ minutes westÀÇ ¼öÀÌ´Ù.
int tz_dsttime
¸¸ÀÏ 0ÀÌ ¾Æ´Ï¶ó¸é, ±× ÇØ(year)ÀÇ ¾î¶² ±â°£µ¿¾È Àϱ¤ Àý¾à½Ã°£À» Àû¿ëÇÑ´Ù.
struct timezone ÇüÀº Àý´ë°ªÀÌ°í °áÄÚ »ç¿ëÇÒÀÏÀº ¾øÀ»°ÍÀÌ´Ù.´ë½Å¿¡ 17.2.6Àý [Time Zone
Functions] 241 ÆäÀÌÁö¿¡¼ ¼³¸íµÈ µµ±¸µé¿¡¼ »ç¿ëÇÑ´Ù.
struct timeval ÇüÀÇ µÎ°ªµéÀ» »©´Â °ÍÀÌ Á¾Á¾ ÇÊ¿äÇÏ´Ù. À̰÷¿¡´Â ÀÌ·±ÀÏÀ» ÇÏ´Â °¡Àå ÁÁÀº ¹æ¹ý
ÀÌ ÀÖ´Ù. ±×°ÍÀº tv_sec ¸â¹ö°¡ unsigned ÇüÀÎ ¾î¶² ±â¹¦ÇÑ ¿î¿µÃ¼Á¦ÇÏ¿¡¼ Á¶Â÷µµ µ¹¾Æ°£´Ù.
/* `struct timeval'ÀÇ ÇüÀ» °¡Áø °ª X ¿Í Y¸¦ »©°í, ±× °á°ú´Â RESULT¿¡ ÀúÀåÇ϶ó. ±× Â÷À̰¡ À½
¼öÀ̸é 1À» ¸®ÅÏÇϰí, ±×·¸Áö ¾ÊÀ¸¸é 0À» ¸®ÅÏÇ϶ó */
int
timeval_subtract (result, x, y)
struct timeval *result, *x, *y;
{
/* °»½ÅµÈ y·Î ³ªÁß¿¡ »©±â¸¦ ÇϱâÀ§ÇØ, y°ªÀ» °¡Á®¿Í¶ó */
if (x->tv_usec < y->tv_usec) {
int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
y->tv_usec -= 1000000 * nsec;
y->tv_sec += nsec;
}
if (x->tv_usec - y->tv_usec > 1000000) {
int nsec = (y->tv_usec - x->tv_usec) / 1000000;
y->tv_usec += 1000000 * nsec;
y->tv_sec -= nsec;
}
/* ±â´Ù¸²À» À§ÇÑ ½Ã°£À» °è»êÇ϶ó. tv_usec´Â ¾î¶² ¾çÀÇ °ªÀÌ´Ù. */
result->tv_sec = x->tv_sec - y->tv_sec;
result->tv_usec = x->tv_usec - y->tv_usec;
/* ¸¸ÀÏ °á°ú°¡ À½¼öÀ̸é 0À» ¸®ÅÏÇ϶ó */
return x->tv_sec < y->tv_sec;
}
ÇÔ¼ö : int gettimeofday (struct timeval *tp, struct timezone *tzp)
gettimeofday ÇÔ¼ö´Â tp °¡ °¡¸®Å°°í ÀÖ´Â ±¸Á¶Ã¼ struct timeval¿¡¼ ÇöÀçÀÇ ³¯Â¥¿Í ½Ã°£À» ¸®ÅÏÇÑ
´Ù. ±× ½Ã°£´ë¿¡ ´ëÇÑ Á¤º¸´Â tzp°¡ °¡¸®Å°°í ÀÖ´Â ±¸Á¶Ã¼ ¾È¿¡ ¸®ÅϵȴÙ. ¸¸ÀÏ tzp Àμö°¡ ³Î Æ÷
ÀÎÅͶó¸é, ½Ã°£ ´ë Á¤º¸´Â ¹«½ÃµÈ´Ù.
¸®ÅϰªÀÌ 0ÀÌ¸é ¼º°øÀ̰í, ½ÇÆÐ¸é -1ÀÌ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ÇÔ¼ö¸¦ À§ÇØ Á¤ÀÇµÈ ¿¡·¯»óȲÀÌ´Ù.
ENOSYS
¿î¿µÃ¼Á¦°¡ ½Ã°£´ë Á¤º¸ ¾ò´Â °ÍÀ» Áö¿øÇÏÁö ¾Ê°í, tzp°¡ ³ÎÆ÷ÀÎÅͰ¡ ¾Æ´Ï´Ù. GNU ¿î¿µÃ¼Á¦´Â ½Ã
°£´ë Á¤º¸¸¦ Ç¥ÇöÇϱâ À§Çؼ struct timezone¸¦ »ç¿ëÇÏ´Â °ÍÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù; ±×°ÍÀº ¿¹Àü¿¡ 4.3
BSD¿¡¼ »ç¿ëµÇ´ø °ÍÀÌ´Ù. ´ë½Å¿¡ 17.2.6Àý[Time Zone Functions] 241 ÆäÀÌÁö¿¡¼ ¼³¸íµÈ µµ±¸µé
À» »ç¿ëÇ϶ó.
ÇÔ¼ö :
int settimeofday(const sruct timeval *tp, const struct timezone *tzp)
settimeofday ÇÔ¼ö´Â Àμöµé¿¡ µû¶ó¼ ÇöÀçÀÇ ³¯Â¥¿Í ½Ã°£À» ¼³Á¤ÇÑ´Ù. gettimeofday¸¦ ÅëÇØ¼, ¸¸
ÀÏ tzp°¡ ³Î Æ÷ÀÎÅͶó¸é, ½Ã°£´ë Á¤º¸´Â ¹«½ÃµÈ´Ù. ´ç½ÅÀÌ settimeofday¸¦ »ç¿ëÇÒ·Á¸é Ư±ÇÀÌ ºÎ¿©
µÈ »ç¿ëÀÚÀ̾î¾ß¸¸ ÇÑ´Ù. ¼º°øÇÏ¸é ¸®ÅϰªÀº 0À̰í, ½ÇÆÐÇϸé -1ÀÌ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ÇÔ¼ö¸¦
À§ÇØ Á¤ÀÇµÈ ¿¡·¯»óȲÀÌ´Ù.
EPERM
ÀÌ ÇÁ·Î¼¼½º°¡ Ư±ÇÀÌ ¾ø±â ¶§¹®¿¡ ½Ã°£À» ¼³Á¤ÇÒ ¼ö ¾ø´Ù.
ENOSYS
¿î¿µÃ¼Á¦°¡ ½Ã°£´ë Á¤º¸¸¦ ¼³Á¤ÇÏ´Â °ÍÀ» Áö¿øÇÏÁö ¾Ê°í, tzp°¡ ³Î Æ÷ÀÎÅͰ¡ ¾Æ´Ï´Ù.
ÇÔ¼ö :
int adjtime (const struct timeval *delta, struct timeval *olddelta)
ÇöÀçÀÇ ½Ã°£À» Á¡Â÷ÀûÀ¸·Î Á¶Á¤Çϱâ À§Çؼ ½Ã½ºÅÛ ½Ã°è¸¦ ºü¸£°Ô, ¶Ç´Â ´À¸®°Ô ÇÏ´Â ÇÔ¼öÀÌ´Ù. ¸¸
ÀÏ °£´ÜÈ÷ ÇöÀçÀÇ ½Ã°£À» ¼³Á¤ÇÒ ¼ö ¾ø´Â, Ç×»ó õÆíÀÏ·üÀûÀ¸·Î Áõ°¡Çϱ⸸ ÇÏ´Â ½Ã½ºÅÛ ½Ã°è¶ó¸é,
À̰ÍÀº ±× ½Ã°£À» ¸ÂÃâ ¼ö°¡ ÀÖ´Ù.
delta Àμö´Â ÇöÀçÀÇ ½Ã°£À» À§ÇÑ Á¶Á¤À» ÁöÁ¤ÇÑ´Ù. ¸¸ÀÏ À½¼ö¶ó¸é ½Ã½ºÅÛ ½Ã°è´Â ÀÒ¾î¹ö¸° ¸¹Àº ½Ã
°£À» º¹±¸ÇÒ¶§±îÁö õõÈ÷ ³»·Á°¡°í, ¸¸ÀÏ ¾ç¼ö¶ó¸é, ½Ã½ºÅÛ ½Ã°è´Â õõÈ÷ ¿Ã¶ó°£´Ù. ¸¸ÀÏ olddelta
Àμö°¡ ³Î Æ÷ÀÎÅͰ¡ ¾Æ´Ï¶ó¸é, adjtimeÇÔ¼ö´Â Á¶Á¤ÀÌ ¾ÆÁ÷ ¼öÇàµÇ±â ÀüÀÇ ¾ÕÀÇ ½Ã°£¿¡ ´ëÇÑ Á¤º¸¸¦
¸®ÅÏÇÑ´Ù. ÀÌ ÇÔ¼ö´Â Ưº°È÷ ·ÎÄà ³×Æ®¿÷»óÀÇ ÄÄÇ»Å͵éÀÇ ½Ã°£À» µ¿±âÈ Çϴµ¥ »ç¿ëµÈ´Ù. ´ç½ÅÀº
±×°ÍÀ» »ç¿ëÇϱâ À§Çؼ´Â Ư±ÇÀÌ ºÎ¿©µÈ »ç¿ëÁö°¡ µÇ¾î¾ß¸¸ ÇÑ´Ù. ¼º°øÇϸé 0À» ¸®ÅÏÇϰí, ½ÇÆÐÇÏ
¸é -1À» ¸®ÅÏÇÑ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ÇÔ¼ö¸¦ À§ÇØ Á¤ÀÇµÈ ¿¡·¯»óȲÀÌ´Ù.
EPERM
´ç½ÅÀº ½Ã°£À» ¼³Á¤ÇÒ ¼ö Àִ Ư±ÇÀ» °®°í ÀÖÁö ¾Ê´Ù.
À̽ļº ³ëÆ® : gettimeofday, settimeofday, ±×¸®°íadjtime ÇÔ¼öµéÀº BSD·ÎºÎÅÍ ¿Ô´Ù.
17.2.3 Broken-down ½Ã°£.
´Þ·Â ½Ã°£Àº ÃÊ´ÜÀ§·Î Ç¥ÇöµÈ´Ù. À̰ÍÀº °è»êÇϱâ´Â Æí¸®ÇÏÁö¸¸, »ç¶÷ÀÌ º¸Åë ³¯Â¥¿Í ½Ã°£À» Ç¥Çö
ÇÏ´Â ¹æ¹ý°ú´Â ´Ù¸£´Ù. ±×¿Í ´Þ¸®, broken-down ½Ã°£Àº ¿¬µµ, ´Þ, ³¯Â¥ µîÀ» ºÐ¸®ÇÏ¿© 2ÁøÀ¸·Î Ç¥
ÇöÇÑ´Ù. Broken down ½Ã°£°ªÀº °è»ê¿¡´Â ºÒÆíÇÏÁö¸¸, ±×µéÀº Àΰ£ÀÌ ÀÐÀ» ¼ö ÀÖ´Â ½Ã°£À¸·Î À¯¿ë
ÇÏ°Ô »ç¿ëµÈ´Ù.
broken-down ½Ã°£ °ªÀº Áö¿ª½Ã°£´ëÀÇ ¼±Åðú Ç×»ó ¿¬°üµÇ¾î ÀÖ°í, ±×°ÍÀº Ç×»ó ¾î¶² ½Ã°£´ë°¡ »ç
¿ëµÇ¾úÀ½À» ÁöÀûÇÑ´Ù. ÀÌ Àý¿¡ ÀÖ´Â ½Éº¼µéÀº Çì´õÆÄÀÏ `time.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : struct tm
À̰ÍÀº broken-down ½Ã°£À» Ç¥ÇöÇϱâ À§ÇØ »ç¿ëµÇ´Â µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù. ±× ±¸Á¶Ã¼´Â ¾î´À ¼ø¼·Î
³ªÅ¸³¯ ¼ö ÀÖ´Â, Àû¾îµµ ´ÙÀ½°ú °°Àº ¸â¹öµéÀ» Æ÷ÇÔÇϰí ÀÖ´Ù.
int tm_sec
À̰ÍÀº 0¿¡¼ 59±îÁöÀÇ ¹üÀ§¸¦ °®´Â ÃÊ(second)¸¦ Ç¥ÇöÇϰí ÀÖ´Ù.(½ÇÁ¦·Î´Â "À±ÃÊ"¸¦ Çã¿ëÇØ¼, 61±î
Áö°¡ Á¦ÇÑÀÌ´Ù.)
int tm_min
À̰ÍÀº 0¿¡¼ 59±îÁöÀÇ ¹üÀ§¸¦ °®´Â ºÐ(minute)À» ³ªÅ¸³½´Ù.
int tm_hour
À̰ÍÀº 0¿¡¼ 23±îÁöÀÇ ¹üÀ§¸¦ °®´Â ½Ã(hours)¸¦ ³ªÅ¸³½´Ù.
int tm_mday
À̰ÍÀº 1¿¡¼ 31±îÁöÀÇ ¹üÀ§¸¦ °®´Â ´ÞÁßÀÇ ±×³¯À» ³ªÅ¸³½´Ù.
int tm_mon
À̰ÍÀº 0¿¡¼ 11±îÁöÀÇ ¹üÀ§¸¦ °®´Â, 1¿ù ÀÌÈÄÀÇ ´ÞÀÇ ¼ö¸¦ Ç¥ÇöÇÑ´Ù.
int tm_year
À̰ÍÀº 1900³â ÀÌÈÄÀÇ ³â(year)ÀÇ ¼öÀÌ´Ù.
int tm_wday
À̰ÍÀº 0¿¡¼ 6ÀÇ ¹üÀ§¸¦ °®´Â, ÀÏ¿äÀÏÀ» ±âÁ¡À¸·Î ÇØ¼ Áö³³¯ÀÇ ¼ö¸¦ ³ªÅ¸³½´Ù.
int tm_yday
À̰ÍÀº 0¿¡¼ 365ÀÇ ¹üÀ§¸¦ °®´Â, 1¿ù 1ÀÏ ÀÌÈÄ Áö³³¯ÀÇ ¼ö¸¦ ³ªÅ¸³½´Ù.
int tm_isdst
À̰ÍÀº ½Ã°£À» Ç¥ÇÑÇϴµ¥, Àϱ¤Àý¾à ½Ã°£ÀÌ ¿µÇâÀ» ÁÖ´ÂÁö(ÀÖ¾ú°Å³ª, ¶Ç´Â ÀÖÀ» ¿¹Á¤À̰ųª)¸¦ ÁöÀû
ÇÏ´Â Ç÷¡±×ÀÌ´Ù. ±× °ªÀº ¸¸ÀÏ Àϱ¤ Àý¾à½Ã°£ÀÌ ¿µÇâÀ» ¹ÌÄ¡¸é ¾ç¼öÀ̰í, ¸¸ÀÏ ±×·¸Áö ¾ÊÀ¸¸é 0ÀÌ
°í, ±× Á¤º¸°¡ À½¼öÀ̸é À¯¿ëÇÏÁö ¾Ê´Ù.
long int tm_gmtoff
ÀÌÇʵå´Â broken-down ½Ã°£°ªÀ» °è»êÇϴµ¥ »ç¿ëµÇ¾îÁö´Â ½Ã°£´ë¸¦ ³ªÅ¸³½´Ù; ±×°ÍÀº ÃÊÀÇ ´ÜÀ§·Î
±×¸®´ÏÄ¡ Ç¥ÁؽÃ(GMT)¸¦ ¾ò¾î¼, ±×°Í¿¡ Áö¿ª½Ã°£À» ¾ò±â À§Çؼ ´õÇØÁ®¾ß¸¸ ÇÏ´Â ¾ç( amount)ÀÌ
´Ù. ±× °ªÀº º¯È °¡´ÉÇÑ ½Ã°£´ë( 17.2.6Àý [Time Zone Functions] 241 ÆäÀÌÁö ÂüÁ¶.)¿Í °°Àº °ÍÀÌ
´Ù. ´ç½ÅÀº ¶ÇÇÑ ±×¸®´ÏÄ¡ Ç¥ÁؽÃÀÇ "seconds westÀÇ ¼ö"¶ó°í »ý°¢ÇÒ ¼öµµ ÀÖ´Ù. tm_gmtoff Çʵå´Â
GNU ¶óÀ̺귯¸® È®ÀåÀÌ´Ù.
const char *tm_zone
À̰ÍÀº broken-down ½Ã°£°ªÀ» °è»êÇϴµ¥ »ç¿ë µÇ¾îÁö´Â ½Ã°£´ë¸¦ À§ÇÑ ¼¼-¹®ÀÚ À̸§ÀÌ´Ù. À̰ÍÀº
GNU ¶óÀ̺귯¸® È®ÀåÀÌ´Ù.
ÇÔ¼ö : struct tm *localtime (const time_t *time)
localtime ÇÔ¼ö´Â timeÀÌ °¡¸®Å°°í ÀÖ´Â ´Þ·Â½Ã°£À» »ç¿ëÀÚ°¡ Á¤ÇÑ ½Ã°£´ë¿Í ¸ÂÃß¾î¼, broken-down
½Ã°£À¸·Î º¯È¯ÇÑ´Ù. ¸®ÅϰªÀº ¾î´À ³¯Â¥¿Í ½Ã°£ ÇÔ¼öµéÀ» È£ÃâÇØ¼ ¾òÀº Á¤Àû broken-down ½Ã°£ ±¸
Á¶Ã¼¸¦ °¡¸®Å°°í ÀÖ´Â Æ÷ÀÎÅÍÀÌ´Ù. (±×·¯³ª ¾î´À ´Ù¸¥ ¶óÀ̺귯¸® ÇÔ¼öµµ ÀÌ ¿ÀºêÁ§Æ®ÀÇ ³»¿ë¿¡ µ¡
¾º¿ì±â (overwrite)¸¦ ÇÒ¼ö¾ø´Ù.) localtimeÀ» È£ÃâÇÏ´Â °ÍÀº ´Ù¸¥ ÇϳªÀÇ ¿µÇâÀÌ ÀÖ´Ù: ±×°ÍÀº º¯¼ö
tzname¸¦ ÇöÀç ½Ã°£´ë¿¡ ´ëÇÑ Á¤º¸·Î ¼³Á¤ÇÑ´Ù. 17.2.6Àý [Time Zone Functions] 241 ÆäÀÌÁö ÂüÁ¶.
ÇÔ¼ö : struct tm *gmtime(const time_t *time)
ÀÌ ÇÔ¼ö´Â broen-downÀÌ ¼¼°è ÇùÁ¤½Ã°£À¸·Î Ç¥ÇöµÈ´Ù´Â °ÍÀ» Á¦¿ÜÇϰí, localtime°ú À¯»çÇÏ´Ù._±×¸®
´ÏÄ¡ Ç¥Áؽð¡ Áö¿ª ½Ã°£´ë¿Í ´õ ¿¬°üÀÌ ÀÖ´Ù. ´Þ·Â ½Ã°£µéÀº Ç×»ó ¼¼°è ÇùÁ¤½Ã·Î Ç¥ÇöµÈ´Ù´Â °ÍÀ»
±â¾ïÇ϶ó.
ÇÔ¼ö : time_t mktime(struct tm *brokentime)
mktime ÇÔ¼ö´Â broken-down ½Ã°£ ±¸Á¶Ã¼¸¦ ´Þ·Â½Ã°£ Ç¥ÇöÀ¸·Î º¯È¯½Ã۱â À§Çؼ »ç¿ëµÈ´Ù. ±×°Í
Àº ´Ù¸¥ ³¯Â¥¿¡ ±âÃÊÇÏ¿© ¿¬µµ(year), ÁÖ(week)ÀÇ ³¯¼ö¿Í ½Ã°£ ¿ä¼ÒµéÀ» ä¿ö¼ broken-down ±¸Á¶
üÀÇ ³»¿ëÀ» "ÀϹÝÈ"ÇÑ´Ù.
mktimeÇÔ¼ö´Â broken-down ½Ã°£ ±¸Á¶Ã¼ÀÇ ¸â¹öÀÎ tm_wday¿Í tm_ydayÀÇ Á¤ÇØÁø ³»¿ëµéÀ» ¹«½ÃÇÑ
´Ù. ±×°ÍÀº ´Þ·Â ½Ã°£À» °è»êÇϱâ À§Çؼ ´Ù¸¥ ±¸¼º¿ä¼ÒÀÇ °ªµéÀ» »ç¿ëÇÑ´Ù; ±×°ÍÀº ±×µéÀÇ º¸Åë
¹üÀ§ÀÇ ¹Û¿¡ ÀÖ´Â ºñÀϹÝÈµÈ °ªµéÀ» °®´Â ±×µé ±¸¼º¿ä¼ÒµéÀ» À§Çؼ Çã¿ëµÇ¾ú´Ù. mktimeÀÌ ¸¶Áö
¸·À¸·Î ÇÏ´ÂÀÏÀº brokentime ±¸Á¶Ã¼ÀÇ ±¸¼º¿ä¼ÒµéÀ» Á¶Á¤ÇÏ´Â °ÍÀÌ´Ù( tm-wday ¿Í tm-yday¸¦ Æ÷
ÇÔÇØ¼ ). ¸¸ÀÏ Á¤ÇØÁø broken-down ½Ã°£ÀÌ ´Þ·Â ½Ã°£À¸·Î Ç¥ÇöµÉ ¼ö ¾ø´Ù¸é, mktimeÀº
(time_t)(-1)ÀÇ °ªÀ» ¸®ÅÏÇϰí brokentimeÀÇ ³»¿ëÀ» °»½ÅÇÒ ¼ö ¾ø´Ù. È£ÃâµÈ mktimeÀº ¶ÇÇÑ ÇöÀçÀÇ
½Ã°£´ë¿¡ ´ëÇÑ Á¤º¸·Î º¯¼ö tzname ¸¦ ¼³Á¤ÇÑ´Ù. 17.2.6Àý [Time Zone Functions] 241 ÆäÀÌÁö ÂüÁ¶.
17.2.4 Çü½ÄÈµÈ ³¯Â¥¿Í ½Ã°£.
ÀÌ Àý¿¡ ¼³¸íµÈ ÇÔ¼öµéÀº ¹®ÀÚ¿·Î ½Ã°£ °ªµéÀ» Çü½ÄÈ ÇÑ´Ù. À̵é ÇÔ¼öµéÀº Çì´õÆÄÀÏ 'time.h'¿¡
¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : char *asctime(const struct tm *brokentime)
asctime ÇÔ¼ö´Â brokentimeÀÌ °¡¸®Å°°í ÀÖ´Â broken-down ½Ã°£À» Ç¥ÁØ Çü½ÄÀ» °¡Áø ¹®ÀÚ¿·Î º¯È¯
ÇÑ´Ù.
"Tue May 21 13:46:22 1991\n"
Á־ȿ¡ ÀÖ´Â ¿äÀÏÀÇ ¾àÀÚ´Â: `Sun', `Mon', `Tue', `Wed', `Thu' `Fri' ±×¸®°í `Sat' ÀÌ´Ù.
´ÞµéÀÇ ¾àÀÚ´Â: '`Jan', `Feb', 'Mar', 'Apr', 'May', Jun', 'Jul', 'Aug', 'Sep', 'Oct', Nov', ±×¸®°í
'Dec' ÀÌ´Ù.
¸®ÅϰªÀº ¾î¶² ³¯Â¥¿Í ½Ã°£ ÇÔ¼öµéÀÇ È£Ãâ¿¡ ÀÇÇÑ °á°ú·Î µ¤¾î¾²±â°¡ µÈ, Á¤ÀûÀ¸·Î ÇÒ´çµÈ ¹®ÀÚ¿À»
°¡¸®Å²´Ù. (±×·¯³ª ¾î´À ´Ù¸¥ ÇÔ¼öµµ ÀÌ ¹®ÀÚ¿ÀÇ ³»¿ë¿¡ µ¡¾º¿ì±â¸¦ ÇÒ ¼ö ¾ø´Ù.)
ÇÔ¼ö : char *ctime(const time_t *time)
ctimeÇÔ¼ö´Â ½Ã°£°ªÀÌ ´Þ·Â½Ã°£(Áö¿ª½Ã°£) Çü½ÄÀ¸·Î ÁöÁ¤µÇ¾ú´Ù´Â °ÍÀ» Á¦¿ÜÇϰí´Â, asctime°ú À¯»ç
ÇÏ´Ù. ±×°ÍÀº asctime(localtime (time))°ú °°´Ù. ctime´Â localtimeÀ¸·Î Çϱ⶧¹®¿¡ º¯¼ö tznameÀ»
¼³Á¤ÇÑ´Ù. 17.2.6Àý [Time Zone Function] 241ÆäÀÌÁö ÂüÁ¶.
ÇÔ¼ö : size_t strftime(char *s, size_t size, const char *template,
const struct tm *brokentime)
ÀÌ ÇÔ¼ö´Â sprintf ÇÔ¼ö(7.11Àý [Formatted Input] 85ÆäÀÌÁö ÂüÁ¶)¿Í À¯»çÇÏÁö¸¸, Çü½Ä ÅÛÇø´
template¾È¿¡ ³ªÅ¸³¯ ¼ö ÀÖ´Â º¯È¯ÁöÁ¤Àº ½Ã°£ º¯È¯À» À§Çؼ Á¤ÇØÁø ÇöÀçÀÇ Áö¿ª½Ã°£¿¡ µû¸¥
brokentimeÀÇ ³¯Â¥¿Í ½Ã°£ÀÇ ¿ä¼ÒµéÀ» ÇÁ¸°Æ®Çϵµ·Ï Ưº°ÈµÇ¾ú´Ù. (19Àå [Locales], 259 ÆäÀÌÁö Âü
Á¶.) template¾È¿¡ ³ªÅ¸³ º¸ÅëÀÇ ¹®ÀÚµéÀº Ãâ·Â ¹®ÀÚ¿ s¿¡ º¹»çµÇ¾î Áø´Ù; À̰ÍÀº ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ
µé·Î ÀÌ·ç¾îÁø ¿µéÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù. º¯È¯ÁöÁ¤ÀÚ´Â `%'¹®ÀÚ ´ÙÀ½¿¡ ³ªÅ¸³ª°í, ´ÙÀ½Ã³·³ Ãâ·Â ¹®
ÀÚ¿À» Á¶Á¤ÇÑ´Ù.
%a ÇöÀçÀÇ Áö¿ª¿¡ ¸Â´Â ¾àÀڷΠǥÇöµÈ ¿äÀÏÀ̸§.
%A ÇöÀçÁö¿ª¿¡ ¸Â´Â ¿ÏÀüÇÑ ¿äÀÏÀ̸§.
%b ÇöÀçÁö¿ª¿¡ ¸Â´Â ¾àÀÚÀÎ ´Þ À̸§.
%B ÇöÀçÁö¿ª¿¡ ¸Â´Â ¿ÏÀüÇÑ ´Þ À̸§.
%c ÇöÀç Áö¿ªÀ» À§ÇØ ¼±ÅÃµÈ ³¯Â¥¿Í ½Ã°£ Ç¥Çö.
%d ½ÊÁø¼ö·Î Ç¥ÇöµÈ(01¿¡¼ 31±îÁöÀÇ ¹üÀ§) ÇÑ´Þ ¾ÈÀÇ ³¯Â¥.
%H 24½Ã°£ ½Ã°è¸¦ »ç¿ëÇØ¼(00¿¡¼ 23±îÁöÀÇ ¹üÀ§), ½ÊÁø¼ö·Î ³ªÅ¸³½ ½Ã°£.
%I 12½Ã°£ ½Ã°è¸¦ »ç¿ëÇØ¼(01¿¡¼ 12±îÁöÀÇ ¹üÀ§), ½ÊÁø¼ö·Î ³ªÅ¸³½ ½Ã°£.
%j ½ÊÁø¼ö(001¿¡¼ 366±îÁöÀÇ ¹üÀ§)·Î Ç¥ÇöµÈ Àϳâ¾ÈÀÇ ³¯¼ö.
%m ½ÊÁø¼ö(01¿¡¼ 12±îÁöÀÇ ¹üÀ§)·Î Ç¥ÇöµÈ ´Þ.
%M ½ÊÁø¼ö·Î Ç¥ÇöµÈ ºÐ.
%p ÁÖ¾îÁø ½Ã°£°ª¿¡ ¸Â´Â, `am'¶Ç´Â `pm'; ¶Ç´Â ÇöÀçÁö¿ª¿¡ ¸Â´Â ¿¬°üµÈ ¹®ÀÚ¿.
%S ½ÊÁø¼ö·Î Ç¥ÇöµÈ ÃÊ.
%U ù ¹øÂ°ÁÖÀÇ Ã¹ ¹øÂ° ³¯ÀΠù ¹øÂ° ÀÏ¿äÀÏÀ» ±âÁ¡À¸·Î ÇØ¼, ½ÊÁø¼ö·Î Ç¥ÇöµÈ ¿Ã
ÇØÀÇ ÁÖÀǼö
%W ù ¹øÂ°ÁÖÀÇ Ã¹ ¹øÂ°³¯ÀΠù ¹øÂ° ¿ù¿äÀÏÀ» ±âÁ¡À¸·Î ÇØ¼, ½ÊÁø¼ö·Î Ç¥ÇöµÈ ¿Ã
ÇØÀÇ ÁÖÀÇ ¼ö
%w ÀÏ¿äÀÏÀ» 0À¸·Î ÇÑ, ½ÊÁø¼ö·Î Ç¥ÇöµÈ ¿äÀÏ.
%x ½Ã°£ ¾øÀÌ, ÇöÀçÁö¿ªÀ» À§ÇØ ¿¹¾àµÈ ³¯Â¥ Ç¥Çö.
%X ³¯Â¥¾øÀÌ, ÇöÀçÁö¿ªÀ» À§ÇØ ¿¹¾àµÈ ½Ã°£ Ç¥Çö.
%y ¼¼±â(century)¾øÀÌ(00¿¡¼ 99±îÁöÀÇ ¹üÀ§), ½ÊÁø¼ö·Î Ç¥ÇöµÈ ¿¬µµ.
%Y ¼¼±â¸¦ Æ÷ÇÔÇØ¼, ½ÊÁø¼ö·Î Ç¥ÇöµÈ ¿¬µµ.
%Z ½Ã°£´ë³ª À̸§ ¶Ç´Â ¾àÀÚ(½Ã°£´ë°¡ °áÁ¤µÉ ¼ö ¾ø´Ù¸é ºñ¿ö¶ó)
%% ¹®ÀÚ `%'
size Àμö´Â ³Î Á¾·á¹®ÀÚ¸¦ Æ÷ÇÔÇØ¼, ¹è¿ s¿¡ ÀúÁ¤µÈ ¹®ÀÚµéÀÇ ÃÖ´ë °³¼ö¸¦ ³ªÅ¸³»±â À§Çؼ »ç¿ë
µÉ ¼ö ÀÖ´Ù. ¸¸ÀÏ Çü½ÄÈµÈ ½Ã°£ÀÌ size Å©±âº¸´Ù ´õ ¸¹Àº ¹®ÀÚµéÀÌ ÇÊ¿äÇÏ´Ù¸é, ÃʰúµÇ´Â ¹®ÀÚµéÀº
¹ö·ÁÁø´Ù. strtimeÀ» ÅëÇÑ ¸®ÅϰªÀº ³Î Á¾·á¹®ÀÚ¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀº, ¹è¿ s¿¡ ÀúÀåµÈ ¹®ÀÚµéÀÇ °³¼ö
ÀÌ´Ù. ¸¸ÀÏ value°¡ size¿Í °°´Ù¸é, ±× ¹è¿ÀÌ ³Ê¹« ÀÛ¾ÒÀ½À» ÀǹÌÇÑ´Ù; ´ç½ÅÀº ¹è¿À» Å©±â¸¦ Å©°Ô
Çϰí, strtime¸¦ Àç È£ÃâÇ϶ó. ¸¸ÀÏ s°¡ ³Î Æ÷ÀÎÅͶó¸é, strftimeÀº ½ÇÁ¦·Î ¾Æ¹«°Íµµ ¾²Áö ¾ÊÁö¸¸, ´ë
½Å¿¡ ¾²¿©Á³´ø ¹®ÀÚµéÀÇ °³¼ö¸¦ ¸®ÅÏÇÑ´Ù. strftime¿¡ ´ëÇÑ ¿¹´Â 17.2.7Àý [Time Functions
Example] 242 ÆäÀÌÁö ÂüÁ¶.
17.2.5 TZÀ¸·Î ½Ã°£´ë¸¦ Á¤Çϱâ.
GNU ½Ã½ºÅÛ¿¡¼, »ç¿ëÀÚ´Â TZ ȯ°æº¯¼ö·Î ½Ã°£´ë¸¦ Á¤ÇÒ ¼ö ÀÖ´Ù. ȯ°æº¯¼ö¸¦ ¾î¶»°Ô ¼³Á¤Çϴ°¡
¿¡ ´ëÇÑ Á¤º¸´Â, 22.2Àý [Environment Variables]317 ÆäÀÌÁö ÂüÁ¶. ½Ã°£´ë¸¦ ¾ï¼¼½ºÇϱâ À§ÇÑ ÇÔ¼ö
´Â 'time.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. TZ º¯¼öÀÇ °ªÀº ¼¼°¡Áö Çü½ÄÁß¿¡ Çϳª°¡ µÈ´Ù. ù ¹øÂ° Çü½ÄÀº Áö¿ª
½Ã°£´ë¿¡¼ Àϱ¤Àý¾à½Ã°£(¶Ç´Â ½æ¸ÓŸÀÓ)ÀÌ ¾ø´Â °÷¿¡¼ »ç¿ëµÈ´Ù:
std offset
std ¹®ÀÚ¿Àº ½Ã°£´ëÀÇ À̸§À» Á¤ÇÑ´Ù. ±×°ÍÀº ¼¼ °³ ÀÌ»óÀÇ ¹®ÀÚ¿ÀÇ ±æÀ̸¦ °¡Á®¾ß¸¸ Çϰí, ÄÝ·Ð
ÀÌ ¼±ÇàµÇ°Å³ª, ¼ýÀÚ, ÄÞ¸¶, ¶Ç´Â Ç÷¯½º³ª ¸¶À̳ʽº ºÎÈ£°¡ µé¾î°¡ ÀÖÀ¸¸é ¾ÈµÈ´Ù. Áö¿ª½Ã°£´ë À̸§
»çÀÌ¿¡ °ø¹éÀÌ ¾ø¾î¾ßÇÑ´Ù. ÀÌ·¯ÇÑ Á¦ÇѵéÀº Á¤È®ÇÏ°Ô ±× ÁöÁ¤À» ºÐ¼®ÇϱâÀ§ÇØ ÇÊ¿äÇÏ´Ù. offset´Â
ÇùÁ¤ ¼¼°è ½Ã°£À» ¾ò±âÀ§Çؼ Áö¿ª½Ã°£¿¡ ´õÇØ¾ß¸¸ ÇÏ´Â ½Ã°£°ªÀ» Á¤ÇÑ´Ù. ±×°ÍÀº [+|-]hh[:mm[:ss]]
¿Í °°Àº ±¸¹®ÀÌ´Ù. À̰ÍÀº ¸¸ÀÏ Áö¿ª½Ã°£´ë°¡ ±×¸®´ÏÄ¡ ÀÚ¿À¼±(Prime Meridian)ÀÇ ¼ÂÊ¿¡ ÀÖ´Ù¸é
¾ç¼öÀ̰í, µ¿ÂÊ¿¡ ÀÖ´Ù¸é À½¼öÀÌ´Ù. ½Ã°£Àº 0°ú 24ÀÇ »çÀÌ¿¡ ÀÖ¾î¾ß¸¸ Çϰí, ºÐ°ú ÃÊ´Â 0°ú 59ÀÇ »ç
ÀÌ¿¡ ÀÖ¾î¾ß¸¸ ÇÑ´Ù.
¿¹¸¦ µé¾î, Àϱ¤Àý¾à½Ã°£À» ÅÃÇÏÁö ¾Ê°í, µ¿ºÎÇ¥Áؽð£À» ¾î¶»°Ô Á¤ÇÏ´ÂÁö´Â ´ÙÀ½°ú °°´Ù.
EST+5
Àϱ¤Àý¾à½Ã°£ÀÌ ÀÖ´Â °÷¿¡¼ »ç¿ëµÇ´Â µÎ ¹øÂ° Çü½Ä:
std offset dst [offset],start[/time],end[/time]
óÀ½ÀÇ std ¿Í offsetÀº À§¿¡ ¼³¸íµÈ°Íó·³ Ç¥ÁØ ½Ã°£ ´ë¸¦ Á¤ÇÑ´Ù. dst ¹®ÀÚ¿°ú offsetÀº Àϱ¤Àý¾à
½Ã°£ÀÇ ½Ã°£´ë¿¡ ¸Â´Â name°ú offsetÀ» Á¤ÇÑ´Ù; ¸¸ÀÏ offsetÀ» »ý·«Çϸé, µðÆúÆ®·Î Ç¥Áؽ𣺸´Ù ÇÑ
½Ã°£ ¾ÕÀ¸·Î Á¤ÇØÁø´Ù.
ÁöÁ¤ÀÚÀÇ ³ª¸ÓÁö´Â Àϱ¤Àý¾à½Ã°£ÀÌ Àִ°÷¿¡¼ÀÇ ¼³¸íÀÌ´Ù. Àϱ¤Àý¾à ½Ã°£ÀÌ ¿µÇâÀ» ¹ÌÄ¥¶§´Â ½Ã
ÀÛÇʵ忡 ÀÖ°í, ´Ù½Ã Ç¥Áؽð£À¸·Î º¯È¯µÇ¾úÀ»¶§´Â ³¡ Çʵ忡 ÀÖ´Ù. ´ÙÀ½ Çü½ÄµéÀº À̵é Çʵ带 À§
ÇÑ ¼³¸íÀÌ´Ù.
Jn
À̰ÍÀº 1°ú 365»çÀÌ¿¡ ÀÖ´Â ¾î¶² ³¯ nÀ¸·Î, À²¸®¿ì½º·ÂÀÇ ³¯Â¥¸¦ Á¤ÇÑ´Ù. À±³â¿¡ ÀÖ´Â 2¿ù 29ÀÏÀº
´õÇØÁöÁö ¾Ê´Â´Ù.
n
0°ú 365»çÀÌ¿¡ ÀÖ´Â ¾î¶²³¯ nÀ¸·Î, À²¸®¿ì½º·ÂÀÇ ³¯Â¥¸¦ Á¤ÇÑ´Ù. À±³â¿¡ ÀÖ´Â 2¿ù 29ÀÏÀº ´õÇØÁø´Ù.
Mm.w.d
m´ÞÀÇ wÁÖÀÇ d³¯. ³¯ d´Â 0(ÀÏ¿äÀÏ)¿Í 6»çÀÌÀÇ °ªÀ̾î¾ßÇÑ´Ù. ÁÖ w´Â ¹Ýµå½Ã 1°ú 5»çÀÌÀÌ´Ù; ÁÖ
1Àº ±×´Þ¿¡¼ ³¯ d°¡ ¹ß»ýÇÑ Ã¹ ¹øÂ° ÁÖÀ̰í, ÁÖ 5´Â ´Þ¿¡¼ ¸¶Áö¸·³¯ d°¡ ÀÖ´Â ¸¶Áö¸·ÁÖÀÌ´Ù. ´Þ
mÀº 1°ú 12»çÀÌÀÌ´Ù. timeÇʵåµéÀº Áö¿ª½Ã°£À» ´Ù¸¥ ½Ã°£Ç¥ÇöÀ¸·Î º¯È¯ÇÒ ¶§ ÁöÁ¤ÇÑ´Ù. ¸¸ÀÏ»ý·«
µÇ¸é, µðÆúÆ®°ªÀº 02:00:00ÀÌ´Ù. ¿¹¸¦ µé¾î, ¹Ì±¹¿¡¼ Àû´çÇÑ Àϱ¤Àý¾à½Ã°£ÀÌ Æ÷ÇÔµÈ ³¯Â¥·Î µ¿ºÎ½Ã
°£´ë¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ ÀÖ´Ù. º¸Åë GMT·ÎºÎÅÍÀÇ offset´Â 5½Ã°£ÀÌ´Ù; ±×¸®´ÏÄ¡ ÀÚ¿À¼±À¸·ÎºÎÅÍ ¼
ÂÊÀ¸·Î Àֱ⶧¹®¿¡ ¾ç¼ö°ªÀÌ´Ù. ½æ¸ÓŸÀÓÀº 4¿ù ù ¹øÂ° ÀÏ¿äÀÏ ¿ÀÀü 2½Ã¿¡ ½ÃÀ۵ǰí, 10¿ù ¸¶Áö¸·
ÀÏ¿äÀÏ ¿ÀÀü 2½Ã¿¡ ³¡³´Ù.
EST+5EDT,M4.1.0/M10.5.0
Ưº°ÇÑ ¾î´À Áö¿ª¿¡¼ Àϱ¤Àý¾à½Ã°£ÀÇ ¿¹Á¤Àº ÇØ¸¶´Ù º¯°æµÈ´Ù. Á¤È®ÇÏ°Ô ÇÏ·Á¸é, ±× Áö¿ª¿¡ ¸Â´Â
Àϱ¤Àý¾à½Ã°£ÀÇ ¿¹Á¤¿¡ ±âÃÊÇÏ¿© ³¯Â¥¿Í ½Ã°£À» º¯°æÇؾßÇÑ´Ù. ±×·¸Áö¸¸, ½Ã½ºÅÛÀº ±× ¿¹Á¤ÀÌ ¾î¶»
°Ô º¯°æµÇ¾ú´ÂÁö¸¦ ´ç½ÅÀÌ ÁöÁ¤ÇÒ µµ±¸µéÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù. ´ç½ÅÀÌ À̰ÍÀ» ÇÒ ¼ö ÀÖ´Â °¡ÀåÁÁÀº
¹æ¹ýÀº ÇϳªÀÇ Æ¯º°ÇÑ ¿¹Á¤À» ÁöÁ¤Çؼ Çϴ°ÍÀÌ´Ù_º¸Åë ÇöÀçÀÇ ½Ã°£À» Ç¥½ÃÇϰí_¾Æ¹«·± ¹®Á¦°¡ ¾ø
À» ¶§, À̰ÍÀº ´Ù¸¥ ³¯Â¥·Î º¯°æÇϱâÀ§ÇØ »ç¿ëµÈ´Ù.
¼¼ ¹øÂ° Çü½ÄÀº ÀÌ¿Í °°´Ù.
:characters
°¢°¢ÀÇ ¿î¿µÃ¼Á¦¸¶´Ù ÀÌ Çü½ÄÀ» ´Ù¸£°Ô ÇØ¼®ÇÑ´Ù; GNU C ¶óÀ̺귯¸®¿¡¼´Â, ¹®ÀÚµéÀº ½Ã°£´ë¸¦
Ç¥ÇöÇÏ´Â ÆÄÀÏÀÇ À̸§À¸·Î ÇØ¼®ÇÑ´Ù. ¸¸ÀÏ TZ ȯ°æº¯¼ö°¡ ¾Æ¹«·± °ªµµ °¡Áö°í ÀÖÁö ¾Ê´Ù¸é, ±× ¿À
ÆÛ·¹À̼ÇÀº µðÆúÆ®·Î ½Ã°£´ë¸¦ Á¤ÇÑ´Ù. °¢ ¿î¿µÃ¼Á¦´Â µðÆúÆ® ½Ã°£´ë¸¦ Á¤Çϱâ À§ÇÑ Àڽųª¸§´ë·Î
ÀÇ ±ÔÄ¢À» °®°í ÀÖ°í, ±×·¡¼ ¿ì¸®°¡ ±×µé¿¡ ´ëÇØ¼ ¸»ÇÒ ¼ö ÀÖ´Â °ÍÀº Àû´Ù.
17.2.6 ½Ã°£´ë¸¦ À§ÇÑ ÇÔ¼ö¿Í º¯¼öµé.
º¯¼ö : char *tzname[2]
tzname ¹è¿Àº »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ Ç¥ÁØ ½Ã°£´ë¿Í Àϱ¤Àý¾à½Ã°£´ëÀÇ À̸§µéÀ» Ç¥ÁØ ¼¼-¹®ÀÚ·Î °¡Áø µÎ
°³ÀÇ ¹®ÀÚ¿À» ÀúÀåÇÑ´Ù. tzname[0]Àº Ç¥Áؽð£´ë(¿¹¸¦ µé¾î "EST")ÀÇ À̸§À̰í, tzname[1]Àº Àϱ¤
Àý¾à½Ã°£ÀÌ »ç¿ëµÉ ¶§ ½Ã°£´ë¸¦ À§ÇÑ À̸§ÀÌ´Ù(¿¹¸¦µé¾î, "EDT"). À̵éÀº TZ ȯ°æº¯¼ö·ÎºÎÅÍ std
¿Í dst¹®ÀÚ¿°ú °°´Ù. tzname ¹è¿Àº tzset, ctime, strftime, mktime, ¶Ç´Â localtimeÀÌ È£ÃâµÉ¶§¸¶´Ù
TZ ȯ°æº¯¼ö·Î ÃʱâȵȴÙ.
ÇÔ¼ö : void tzset(void)
tzsetÇÔ¼ö´Â TZ ȯ°æº¯¼öÀÇ °ªÀ¸·Î tznameº¯¼ö¸¦ ÃʱâÈÇÑ´Ù. À̰ÍÀº ½Ã°£´ë¿¡ ÀÇÁ¸ÇÏ´Â ´Ù¸¥ ½Ã°£
º¯È¯ ÇÔ¼öµé¿¡¼ »ç¿ëµÉ ¶§ ÀÚµ¿ÀûÀ¸·Î È£ÃâµÇ±â ¶§¹®¿¡ ´ç½ÅÀÌ Á÷Á¢ ´ç½ÅÀÇ ÇÁ·Î±×·¥À» ÅëÇØ¼ ÀÌ
°ÍÀ» ºÎ¸¦Çʿ䰡 ¾øÀ» °ÍÀÌ´Ù.
´ÙÀ½ÀÇ º¯¼öµéÀº À¯´Ð½º ½Ã½ºÅÛ V¿ÍÀÇ È£È¯¼ºÀ» À§Çؼ Á¤ÀǵǾú´Ù. ÀÌµé º¯¼öµéÀ» localtime ÇÔ¼ö
¸¦ È£ÃâÇÔÀ¸·Î½á ¼³Á¤µÈ´Ù.
º¯¼ö : longint timezone
À̰ÍÀº ±×¸®´ÏÄ¡ Ç¥ÁØ½Ã¿Í Áö¿ª Ç¥ÁØ ½Ã°£»çÀÌÀÇ Â÷À̸¦ ÃÊ´ÜÀ§·Î ÀúÀåÇÑ´Ù. ¿¹¸¦ µé¾î, ¹Ì±¹¿¡¼
µ¿ºÎ½Ã°£´ëÀÇ °ªÀº 5*60*60ÀÌ´Ù.
¿ªÀÚÁÖ : ¾Æ±î µ¿ºÎ½Ã°£´ë°¡ ±×¸®´ÏÄ¡ Ç¥ÁØ½Ã¿Í 5½Ã°£ÀÇ Â÷À̰¡ ³´Ù°í ÇßÀ¸´Ï±î... 5*60*60.
º¯¼ö : int daylight
ÀÌ º¯¼ö´Â ¸¸ÀÏ Ç¥ÁØ ¹Ì±¹ Àϱ¤Àý¾à½Ã°£ ±ÔÄ¢ÀÌ Àû¿ëµÈ´Ù¸é 0ÀÌ ¾Æ´Ñ°ªÀ» °¡Áø´Ù.
17.2.7 ½Ã°£ ÇÔ¼öµéÀÇ ¿¹Á¦.
Áö¿ª½Ã°£°ú ´Þ·Â½Ã°£ ÇÔ¼öµéÀÇ ¸î°¡Áö¸¦ »ç¿ëÇÏ´Â ¿¹¸¦ º¸¿©ÁÖ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
#include <time.h>
#include <stdio.h>
#define SIZE 256
int
main (void)
{
char buffer[SIZE];
time_t curtime;
struct tm *loctime;
/* ÇöÀçÀÇ ½Ã°£À» ¾ò¾î¶ó */
curtime = time (NULL);
/* Áö¿ª½Ã°£ Ç¥ÇöÀ¸·Î º¯È¯Ç϶ó */
loctime = localtime (&curtime);
/* Ç¥ÁØ Çü½ÄÀ¸·Î ³¯Â¥¿Í ½Ã°£À» Ãâ·ÂÇ϶ó. */
fputs (asctime (loctime), stdout);
/* º¸±âÁÁÀº Çü½ÄÀ¸·Î ±×°ÍÀ» Ãâ·ÂÇ϶ó */
strftime (buffer, SIZE, "Today is %A, %B %d.\n", loctime);
fputs (buffer, stdout);
strftime (buffer, SIZE, "The time is %I:%M %p.\n", loctime);
fputs (buffer, stdout);
return 0;
}
´ÙÀ½°ú °°Àº Ãâ·ÂÀ» ¸¸µé¾î³½´Ù.
Wed Jul 31 13:02:36 1991
Today is Wednesday, July 31.
The time is 01:02 PM.
17.3 ¾Ë¶÷À» ¼³Á¤Çϱâ.
alarm °ú setitimer ÇÔ¼öµéÀº ¾î¶² ¹Ì·¡ÀÇ ½Ã°£¿¡ ÇÁ·Î¼¼½º ±× ÀÚü¿¡ ÀÎÅÍ·´Æ®¸¦ °Å´Â ¸ÞÄ«´ÏÁòÀ»
Á¦°øÇÑ´Ù. ±×µéÀº ŸÀ̸Ӹ¦ ¼³Á¤ÇÔÀ¸·Î½á ÀÌ·ç¾îÁø´Ù. ŸÀ̸Ӱ¡ ³¡³ª¸é, ÇÁ·Î¼¼½º´Â ½ÅÈ£¸¦ ¹Þ´Â´Ù.
°¢ ÇÁ·Î¼¼½º´Â À¯¿ëÇÑ ¼¼°¡Áö µ¶¸³ °£°Ý ŸÀ̸Ӹ¦ °®´Â´Ù.
? ½Ã°è ½Ã°£À» °è»êÇÏ´Â ½ÇÁ¦-½Ã°£ ŸÀ̸Ó. ÀÌ Å¸À̸Ӵ ±× ½Ã°£ÀÌ °æ°úµÇ¸é ÇÁ·Î
¼¼½º¿¡°Ô SIGALRM ½ÅÈ£¸¦ º¸³½´Ù.
? ÇÁ·Î¼¼½º¿¡ ÀÇÇØ »ç¿ëµÈ CPU½Ã°£À» ¼ÀÇÏ´Â °¡»ó ŸÀ̸Ó. ÀÌ Å¸À̸Ӵ ±× ½Ã°£ÀÌ
°æ°úµÇ¸é ÇÁ·Î¼¼½º¿¡°Ô SIGVTALRM ½ÅÈ£¸¦ º¸³½´Ù.
? profiling ŸÀ̸Ӵ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ »ç¿ëµÈ CPU ½Ã°£°ú ÇÁ·Î¼¼½º¸¦ À§ÇÑ ½Ã½ºÅÛ
È£Ãâ¿¡¼ »ç¿ëµÈ CPU ½Ã°£ ¾çÂÊÀ» °è»êÇÑ´Ù.
ÀÌ Å¸À̸Ӵ ±× ½Ã°£ÀÌ °æ°úµÇ¾úÀ» ¶§, ÇÁ·Î¼¼½º¿¡°Ô SIGPROF ½ÅÈ£¸¦ º¸³½´Ù.
´ç½ÅÀº ¾î¶² Á¾·ù·Î ¼³Á¤µÈ ¾î´À ÁÖ¾îÁø ½Ã°£¿¡ ÇѰ¡ÁöÀÇ Å¸À̸Ӹ¸À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸ÀÏ ´ç½Å
ÀÌ ¾ÆÁ÷ °æ°úµÇÁö ¾ÊÀº ½Ã°£À» °¡Áø ŸÀ̸Ӹ¦ ¼³Á¤Çϸé, ±× ŸÀ̸Ӵ »õ·Î¿î °ªÀ¸·Î °£´ÜÈ÷ Àç¼³Á¤
µÈ´Ù. ´ç½ÅÀº setitimer À̳ª alarmÀ» È£ÃâÇϱâ Àü¿¡ signalÀ̳ª sigactionÀ» »ç¿ëÇØ¼ Àû´çÇÑ ¾Ë¶÷
½ÅÈ£¸¦ À§ÇÑ Çڵ鷯¸¦ ¸¸µé¾î¾ß ÇÒ °ÍÀÌ´Ù. ±×·¸Áö¾Ê´Ù¸é, ½Ã°£ÀÌ °æ°úµÇ¾úÀ» ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Â »ç
°ÇµéÀÇ ¿¬°áÀº ¾Ë¶÷ ½ÅÈ£µé¿¡ ´ëÇÑ µðÆúÆ® µ¿ÀÛÀ¸·Î, ÇÁ·Î±×·¥ÀÇ Á¾°áÀ» ¹ß»ý½Ãų °ÍÀÌ´Ù. 21Àå.
[Signal Handling] 271ÆäÀÌÁö ÂüÁ¶.
setitimer ÇÔ¼ö´Â ¾Ë¶÷À» ¼³Á¤Çϱâ À§Çؼ ÁÖ¿äÇÑ ¹æ¹ýÀÌ´Ù. ÀÌ µµ±¸´Â Çì´õÆÄÀÏ `sys/time.h'¿¡ ¼±
¾ðµÇ¾î ÀÖ´Ù. ½ÇÁ¦-½Ã°£ ŸÀ̸Ӹ¦ ¼³Á¤Çϱâ À§Çؼ °£´ÜÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ´Â alarm ÇÔ¼ö´Â
`unistd.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
µ¥ÀÌÅÍŸÀÔ : struct itimerval
ÀÌ ±¸Á¶Ã¼´Â ŸÀ̸Ӱ¡ °æ°úµÇ´Â ¶§´Â Á¤Çϱâ À§Çؼ »ç¿ëµÇ¾îÁø´Ù. ±×°ÍÀº ´ÙÀ½°ú °°Àº ¸â¹öµéÀ»
Æ÷ÇÔÇϰí ÀÖ´Ù.
struct timeval it_interval
À̰ÍÀº ¿¬¼ÓÀûÀΠŸÀÌ¸Ó ÀÎÅÍ·´Æ®µé »çÀÌÀÇ °£°ÝÀÌ´Ù. ¸¸ÀÏ 0À̸é, alarmÀº ¿ÀÁ÷ ÇÑ ¹ø¸¸ º¸³»Áú°Í
ÀÌ´Ù.
struct timeval it_value
À̰ÍÀº ù ¹øÂ° ŸÀÌ¸Ó ÀÎÅÍ·´Æ® °£°ÝÀÌ´Ù. ¸¸ÀÏ 0À̸é, ¾Ë¶÷Àº ºÒ°¡´ÉÇÏ´Ù.
µ¥ÀÌÅÍŸÀÔ struct timevalÀº 17.2.2Àý [High-Resolution Calendar] 235 ÆäÀÌÁö¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö :
int setitimer(int which, struct itimerval *old, struct itimerval *new )
setitimer ÇÔ¼ö´Â new¿¡ µû¸¥°Í¿¡ ÀÇÇØ Á¤ÇØÁø ŸÀ̸Ӹ¦ ¼³Á¤ÇÑ´Ù. which Àμö´Â ITIMER_REAL,
ITIMER_VIRTUAL, ¶Ç´Â, ITIMER_PROF ÁßÀÇ ÇѰªÀ» °¡Áú ¼ö ÀÖ´Ù. ¸¸ÀÏ old°¡ ³Î Æ÷ÀÎÅͰ¡ ¾Æ´Ï
¶ó¸é, setitimer Àº ±×°ÍÀÌ °¡¸®Å°°í ÀÖ´Â ±¸Á¶Ã¼¿¡ °°Àº Á¾·ùÀÇ Àü¿¡ °æ°úµÇÁö ¾Ê¾Ò´ø ¾î´À ŸÀ̸Ó
¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù. ¼º°øÇÏ¸é ¸®ÅϰªÀº 0À̰í, ½ÇÆÐÇϸé -1ÀÌ´Ù.
´ÙÀ½ÀÇ errno´Â ÀÌ ÇÔ¼ö¸¦ À§ÇØ Á¤ÀÇµÈ ¿¡·¯»óȲÀÌ´Ù.
EINVAL
ŸÀ̸ÓÀÇ °£°ÝÀÌ ³Ê¹« ±æ¾ú´Ù.
ÇÔ¼ö : int getitimer(int which, struct itimerval *old)
getitimer ÇÔ¼ö´Â old°¡ °¡¸®Å°°í ÀÖ´Â ±¸Á¶Ã¼¿¡ÀÇÇØ Á¤ÇØÁø ŸÀ̸ӿ¡ ´ëÇÑ Á¤º¸¸¦ ÀúÀåÇÑ´Ù. ¸®ÅÏ
°ª°ú ¿¡·¯»óȲµéÀº setitimer°ú °°´Ù.
ITIMER_REAL
ÀÌ »ó¼ö´Â ½ÇÁ¦-½Ã°£ ŸÀ̸ӷΠÁ¤Çϱâ À§Çؼ, setitimer°ú getitimer ÇÔ¼öµé¿¡¼ which Àμö·Î½á »ç
¿ëµÉ ¼ö ÀÖ´Ù.
ITIMER_VIRTUAL
ÀÌ »ó¼ö´Â °¡»ó ŸÀ̸ӷΠÁ¤Çϱâ À§Çؼ, setitimer°ú getitimer ÇÔ¼öµé¿¡¼ which Àμö·Î½á »ç¿ëµÉ
¼ö ÀÖ´Ù.
ITIMER_PROF
ÀÌ »ó¼ö´Â profiling ŸÀ̸ӷΠÁ¤Çϱâ À§Çؼ, setitimer°ú getitimer ÇÔ¼öµé¿¡¼ which Àμö·Î½á »ç¿ë
µÉ ¼ö ÀÖ´Ù.
ÇÔ¼ö : unsigned int alarm(unsigned int seconds)
alarm ÇÔ¼ö´Â ÃÊ´ÜÀ§·Î seconds°¡ °æ°úµÇµµ·Ï ½ÇÁ¦-½Ã°£ ŸÀ̸Ӹ¦ ¼³Á¤ÇÑ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÇöÁ¸ÇÏ´Â
alarmÀ» Ãë¼ÒÇÏ±æ ¿øÇÑ´Ù¸é, ´ç½ÅÀº seconds Àμö¸¦ 0À¸·Î ÇØ¼ alarmÀ» È£ÃâÇÏ¸é µÈ´Ù. ¸®ÅϰªÀº
¹Ì¸® È£ÃâµÆ´ø alarm¿¡¼ ¸îÃʰ¡ ³²¾Ò´ÂÁö¸¦ °¡¸®Å²´Ù. ¸¸ÀÏ ¹Ì¸® È£ÃâµÈ alarmÀÌ ¾ø´Ù¸é, alarmÀº
0À» ¸®ÅÏÇÑ´Ù. alarmÇÔ¼ö´Â ÀÌó·³ setitimer¿¡ ÀÇÇÏ¿© Á¤ÀÇµÉ ¼ö ÀÖ´Ù.
unsigned int
alarm (unsigned int seconds)
{
struct itimerval old, new;
new.it_interval.tv_usec = 0;
new.it_interval.tv_sec = 0;
new.it_value.tv_usec = 0;
new.it_value.tv_sec = (long int) seconds;
if (setitimer (ITIMER_REAL, &new, &old) < 0)
return 0;
else
return old.it_value.tv_sec;
}
alarm ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¿¹´Â 21.4.1Àý [Handler Returns] 285 ÆäÀÌÁö¿¡¼ º¸¿©ÁÖ°í ÀÖ´Ù. ¸¸ÀÏ ´ç
½ÅÀÌ ÁÖ¾îÁø ½Ã°£(ÃÊ´ÜÀ§ÀÇ)µ¿¾È ´ç½ÅÀÇ ÇÁ·Î¼¼½º°¡ ±â´Ù¸®±â¸¦ ¿øÇÑ´Ù¸é sleep ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö
ÀÖÀ» °ÍÀÌ´Ù. 17.4Àý[Sleeping] 244 ÆäÀÌÁö ÂüÁ¶.
´ç½ÅÀº ŸÀ̸Ӱ¡ °æ°úµÇ¾úÀ» ¶§, Á¤È®ÇÏ°Ô µµÂøµÈ ½ÅÈ£¸¦ ¼¿¼ö¾øÀ» °ÍÀÌ´Ù.
¸ÖƼÇÁ·Î¼¼½Ì ȯ°æ¿¡¼´Â ¾î´ÀÁ¤µµÀÇ Áö¿¬ÀÌ Àֱ⠶§¹®ÀÌ´Ù.
À̽ļº ³ëÆ®: setitimer ¿Í getitimer ÇÔ¼öµéÀº BSD Unix·ÎºÎÅÍ ¿Ô°í, alarm ÇÔ¼ö´Â POSIX.1 Ç¥ÁØ
À¸·Î Á¤ÇØÁ®ÀÖ´Ù. setitimer Àº alarmº¸´Ù´Â ´õ °·ÂÇÏÁö¸¸, alarmÀÌ ´õ ±¤¹üÀ§ÇÏ°Ô ¾²ÀδÙ.
17.4 Sleeping
sleep ÇÔ¼ö´Â ªÀº ½Ã°£µ¿¾È ±× ÇÁ·Î±×·¥À» ±â´Ù¸®°Ô ÇÏ´Â °£´ÜÇÑ ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ¸¸ÀÏ ´ç½ÅÀÇ
ÇÁ·Î±×·¥ÀÌ ½ÅÈ£µéÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é( Á¾·á¸¦ Á¦¿ÜÇϰí), ´ç½ÅÀº sleep°¡ Á¤ÇØÁø ½Ã°£µ¿¾È¿¡ È®½Ç
ÇÏ°Ô ±â´Ù¸°´Ù´Â °ÍÀ» ±â´ëÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é, sleep´Â ¸¸ÀÏ ½ÅÈ£°¡ µµÂøÇÑ´Ù¸é °ð¹Ù·Î ¸®
Å쵃 ¼ö ÀÖ´Ù; ¸¸ÀÏ ´ç½ÅÀÌ ½ÅÈ£¿¡ »ó°ü¾øÀÌ ÁÖ¾îÁø ½Ã°£µ¿¾È ±â´Ù¸®±â¸¦ ¿øÇÑ´Ù¸é select( 8.6Àý
[Waiting for I/O], 111 ÆäÀÌÁö ÂüÁ¶.)¸¦ »ç¿ëÇϰí, ±â´Ù¸®´Â ¾î¶°ÇÑ ±â¼úÀÚµµ ÁöÁ¤ÇÏÁö ¸»¾Æ¶ó.
ÇÔ¼ö : unsigned int sleep (unsigned int seconds)
sleep ÇÔ¼ö´Â secondsµ¿¾È ±â´Ù¸®°Å³ª, ù ¹øÂ° ¹ß»ýÇÑ ½ÅÈ£°¡ µµÂøµÉ¶§±îÁö ±â´Ù¸°´Ù. ¸¸ÀÏ sleep
ÇÔ¼ö°¡ ¿äûµÈ ½Ã°£ÀÌ °æ°úµÇ¾ú±â ¶§¹®¿¡ ¸®ÅÏÇß´Ù¸é, ¸®ÅϰªÀº 0ÀÌ´Ù. ¸¸ÀÏ ½ÅÈ£°¡ µµÂøµÇ¾î¼ ¸®
ÅÏÇß´Ù¸é, ±× ¸®ÅϰªÀº ¾ÆÁ÷ °æ°úµÇÁö ¾Ê°í ³²Àº ½Ã°£ÀÇ °ªÀÌ´Ù. sleep ÇÔ¼ö´Â `unistd.h'¿¡ ¼±¾ðµÇ¾î
ÀÖ´Ù.
sleep°¡ 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇßÀ» ¶§, ±× ¸®ÅϰªÀ» »ç¿ëÇØ¼ Á¤ÇØÁø ½Ã°£µ¿¾È ´Ù½Ã ±â´Ù¸®µµ·Ï sleep
¸¦ ÀçÈ£ÃâÇÏ·Á´Â À¯È¤¿¡ ÀúÇ×Ç϶ó. À̰ÍÀº ºó¹øÇÏ°Ô µµÂøÇÑ ½ÅÈ£µé¸¸Å Á¤È®ÇÏ°Ô ±æ¾îÁø ¾î¶² ½Ã°£
µ¿¾È ÀÛ¾÷ÇÒ °ÍÀÌ´Ù. ±×·¯³ª °¢ ½ÅÈ£´Â ±× ºÎ°¡ÀûÀÎ ½Ã°£(ÃÊ)À¸·Î ÀÎÇØ¼ ¿ø·¡ Á¤ÇØÁø ±â´Ù¸²ÀÇ ½Ã
°£º¸´Ù ±æ¾îÁö°Ô ÇÒ °ÍÀÌ´Ù. ±â´Ù¸²ÀÌ ¾ó¸¶³ª ±æ¾îÁö°Å³ª, ª¾ÆÁú¼ö ÀÖ´ÂÁö¿¡ ´ëÇÑ ¾Æ¹«·± Á¦ÇÑÀÌ
¾ø´Â ¾î¶² ½ÅÈ£µéÀÌ ºÒÇàÇϰԵµ ºü¸£°Ô ¿¬¼ÓÀûÀ¸·Î ¹ß»ýÇÑ ´Ù°í °¡Á¤Ç϶ó.
´ë½Å¿¡, ±× ÇÁ·Î±×·¥ÀÌ ±â´Ù¸²À» ¸ØÃß°Ô µÈ ±× ½Ã°£À» °è»êÇϰí, ´Ù½Ã ³²¾ÆÀÖ´Â ½Ã°£µ¿¾È ±â´Ù¸²À»
´Ù½Ã ½ÃµµÇϵµ·Ï Ç϶ó. À̰ÍÀº 1Ãʺ¸´Ùµµ ´õ ¸¹ÀÌ ½Ã°£Â÷À̰¡ ³ªÁö ¾ÊÀ» °ÍÀÌ´Ù. ´õ ÀûÀº ½Ã°£µ¿¾È
ÀÛ¾÷ÇÏ·Á¸é, ´ç½ÅÀº select¸¦ »ç¿ëÇϰí, ²Ï Á¤È®ÇÑ ½Ã°£µ¿¾È ±â´Ù¸®°Ô ÇÒ ¼ö ÀÖ´Ù. ( ¹°·Ð, ¸ÖƼÀ¯Àú
½Ã½ºÅÛ¿¡¼ ±× ±â°è°¡ ´ÜÁö ÇÑ ÀÀ¿ëÇÁ·Î±×·¥À» À§Çؼ »ç¿ëµÇÁö ¾Ê´Â´Ù¸é, ÇÇÇÒ¼ö ¾ø´Â ºÎ°¡ÀûÀÎ Áö
¿¬À» ¹ß»ýµÉ °ÍÀÌ´Ù, ´ç½ÅÀÌ ±×°ÍÀ» ÇÇÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ¾Æ¹«°Íµµ ¾ø´Ù. )
¾î¶² ½Ã½ºÅÛ»ó¿¡¼, ¸¸ÀÏ ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼ SIGALRMÀ» »ç¿ëÇÑ´Ù¸é sleep´Â ÀÌ»óÇÏ°Ô µ¿ÀÛÇÒ¼ö
ÀÖ´Ù. ½ÉÁö¾î sleep°¡ È£ÃâµÇ¾úÀ» ¶§ SIGALRM ½ÅÈ£°¡ ¹«½ÃµÇ°Å³ª ºí·ÏµÈ´Ù¸é, sleep´Â SIGALRM
½ÅÈ£ ¶§¹®¿¡ ½Ã±â»óÁ¶ÀûÀ¸·Î ¸®Å쵃 °ÍÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÇÁ·Î¼¼½º°¡ ±â´Ù¸®°í ÀÖ´Â(sleeping)µ¿¾È
¹è´ÞµÈ SIGALRM ½ÅÈ£¿Í SIGALRM ½ÅÈ£¸¦ À§ÇÑ Çڵ鷯¸¦ ¸¸µé¾ú´Ù¸é, ±× µ¿ÀÛÀº´ç½ÅÀÌ ¸¸µç ½ÅÈ£
Çڵ鷯¿¡ ±× 󸮸¦ ¸Ã±â´Â ´ë½Å¿¡ sleepÀÇ ¸®ÅÏÀ» ¹ß»ý½Ãų °ÍÀÌ´Ù. ±×¸®°í ¸¸ÀÏ sleep°¡ alarmÀ»
¿äûÇϰųª SIGALRMÀÇ Ã³¸®¸¦ ¼±ÅÃÇÏ´Â Çڵ鷯°¡ °¡Áø ½ÅÈ£¿¡ ÀÇÇØ ÀÎÅÍ·´Æ®µÈ´Ù¸é, ÀÌ Çڵ鷯¿Í
sleep´Â ¹æÇصɰÍÀÌ´Ù.
GNU ½Ã½ºÅÛ¿¡¼´Â, sleep°¡ SIGALRM¿¡ ÀÇÇÏ¿© ÀÛ¾÷ÇÏÁö ¾Ê±â ¶§¹®¿¡, sleep¿Í SIGALRMÀ» °°Àº
ÇÁ·Î±×·½¿¡¼ »ç¿ëÇÏ´Â °ÍÀÌ ¾ÈÀüÇÑ´Ù.
17.5 ÀÚ¿ø »ç¿ë.
ÇÔ¼ö getrusage ¿Í µ¥ÀÌÅÍŸÀÔ struct rusage´Â ÇÁ·Î¼¼½ºÀÇ »ç¿ëÇüŸ¦ ½ÃÇèÇϱâ À§Çؼ »ç¿ëµÈ´Ù.
±×µéÀº `sys/resource.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : int getrusage(int processes, struct rusage *rusage)
ÀÌ ÇÔ¼ö´Â processes¿¡ ÀÇÇØ Á¤ÇØÁø ±× ÇÁ·Î¼¼½º¸¦ À§ÇØ »ç¿ëµÈ °ÍÀ» *rusage¿¡ Á¤º¸¸¦ ÀúÀåÇÏ¿©,
º¸°íÇÑ´Ù. ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼, processes´Â ¿ÀÁ÷ µÎ °³ÀÇ À¯¿ëÇÑ °ªÀ» °¡Áø´Ù:
RUSAGE_SELF
´ÜÁö ÇöÀçÀÇ ÇÁ·Î¼¼½º.
RUSAGE_CHILDREN
ÀÌ¹Ì Á¾·áµÈ ¸ðµç ÀÚ½Ä ÇÁ·Î¼¼½º(Á÷Á¢ °ú °£Á¢).
GNU ½Ã½ºÅÛ¿¡¼, ÇÁ·Î¼¼½º ID¸¦ Á¤ÇÔÀ¸·Î ÇØ¼, ƯÁ¤ÇÑ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ´ëÇØ¼ Á¶»çÇÒ ¼ö ÀÖ´Ù.
getrusageÀÇ ¸®ÅϰªÀº ¼º°øÇϸé 0À̰í, ½ÇÆÐÇϸé -1ÀÌ´Ù.
EINVAL
processes Àμö°¡ À¯¿ëÇÏÁö ¾Ê´Ù.
ƯÁ¤ÇÑ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ À§ÇÑ »ç¿ëÇüŸ¦ ¾ò´Â ¹æ¹ýÀº wait4 ÇÔ¼ö¸¦ ÅëÇØ¼ ÇÒ ¼ö Àִµ¥, ±× ÇÔ¼ö
´Â ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Á¾·áµÇ¾úÀ» ¶§ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ À§ÇÑ ¸ðµç °ÍÀ» ¸®ÅÏÇÑ´Ù. 23.8Àý [BSD Wait
Functions] 332 ÆäÀÌÁö ÂüÁ¶.
µ¥ÀÌÅÍŸÀÔ : struct rusage
ÀÌ µ¥ÀÌÅÍŸÀÔÀº ´Ù¾çÇÑ Á¾·ùÀÇ ÀÚ¿ø¿¡ ´ëÇÑ »ç¿ë·®À» ±â·ÏÇÑ´Ù. À̰ÍÀº ´ÙÀ½°ú °°Àº ¸â¹öµéÀ» °®À¸
¸ç, ´Ù¸¥°Íµµ °¡´ÉÇÏ´Ù.
struct timeval ru_utime »ç¿ëµÈ »ç¿ëÀÚ ½Ã°£.
struct timeval ru_stime »ç¿ëµÈ ½Ã½ºÅÛ ½Ã°£.
long ru_majflt ÆäÀÌÁö ÆúÆ®ÀÇ °³¼ö.
long ru_inblock ºí·ÏµÈ ÀÔ·Â ¸í·ÉÀÇ °³¼ö.
long ru_oublock ºí·ÏµÈ Ãâ·Â ¸í·ÉÀÇ °³¼ö.
long ru_msgsnd º¸³Â´ø ¸Þ½ÃÁöÀÇ °³¼ö.
long ru_msgrcv ¹Þ¾Ò´ø ¸Þ½ÃÁöÀÇ °³¼ö.
long ru_nsignals ¹Þ¾Ò´ø ½Ã±×³¯ÀÇ °³¼ö.
»ç¿ëÇüŸ¦ ½ÃÇèÇÏ´Â ÇÔ¼ö·Î´Â vtimesµµ ÀÖÁö¸¸ ¿©±â¼ ¼³¸íÇÏÁö´Â ¾Ê´Â´Ù.±×°ÍÀº `sys/vtimes.h'¿¡
¼±¾ðµÇ¾î ÀÖ´Ù.
17.6 Á¦ÇÑµÈ ÀÚ¿ø »ç¿ë.
´ç½ÅÀº ÇÁ·Î¼¼½ºÀÇ ÀÚ¿ø »ç¿ë¿¡ ´ëÇØ¼ Á¦ÇÑÀ» °¡ÇÒ ¼ö ÀÖ´Ù. ±× ÇÁ·Î¼¼½º°¡ Á¦ÇÑÀ» ³Ñ¾î¼·Á ½Ã
µµÇÒ ¶§, Á¦ÇÑ¿¡ µû¶ó¼ ±× ÇÁ·Î¼¼½º´Â ½ÅÈ£¸¦ ¹Þ°Å³ª, ¾Æ´Ï¸é ½ÃµµÇß´ø°ÍÀÇ ½ÇÆÐ·Î ÀÎÇÑ ½Ã½ºÅÛ È£
ÃâÀÌ µÉ °ÍÀÌ´Ù. °¢ ÇÁ·Î¼¼½º´Â ±× ºÎ¸ð ÇÁ·Î¼¼½º·ÎºÎÅÍ Ã³À½¿¡´Â Á¦ÇÑÀ» »ó¼Ó¹ÞÁö¸¸, ±×ÈÄ¿¡´Â ±×
µéÀ» º¯°æ ÇÒ ¼ö ÀÖ´Ù.
ÀÌ Àý¿¡ ÀÖ´Â ½Éº¼µéÀº `sys/resource.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.
ÇÔ¼ö : int getrlimit(int resource, struct rlimit *rlp)
ÀÚ¿ø resourceÀÇ ÇöÀç°ª°ú ÃÖ´ë°ªÀ» Àаí, ±×µéÀ» *rlp¿¡ ÀúÀåÇÑ´Ù. ¼º°øÇÏ¸é ¸®ÅϰªÀº 0ÀÌ°í ½ÇÆÐÇÏ
¸é -1ÀÌ´Ù. ¹ß»ý °¡´ÉÇÑ ¿¡·¯ »óȲÀº EFAULT»ÓÀÌ´Ù.
ÇÔ¼ö : int setrlimit(int resource, struct rlimit *rlp)
*rlp¿¡ ÀÖ´Â °ÍÀ¸·Î ÀÚ¿ø resourceÀÇ ÇöÀç°ª°ú ÃÖ´ë°ªÀ» ¼³Á¤ÇÑ´Ù. ¼º°øÇÏ¸é ¸®ÅϰªÀº 0ÀÌ°í ½ÇÆÐÇÏ
¸é -1ÀÌ´Ù. ´ÙÀ½ÀÇ errno´Â °¡´ÉÇÑ ¿¡·¯»óȲÀÌ´Ù.
EPERM
´ç½ÅÀÌ Çã¿ëµÈ ÃÖ´ë Á¦ÇѰªÀ» º¯°æÇÏ·Á ½ÃµµÇßÁö¸¸, ´ç½ÅÀº ±×·¸°Ô ÇÒ¸¸ÇÑ Æ¯±ÇÀ» ºÎ¿©¹ÞÁö ¾Ê¾Ò´Ù.
µ¥ÀÌÅÍŸÀÔ : struct rlimit
ÀÌ ±¸Á¶Ã¼´Â Á¦ÇѰªµéÀ» ¹Þ±âÀ§Çؼ getrlimit¿¡¼ »ç¿ëµÇ°í, Á¦ÇѰªµéÀ» Á¤Çϱâ À§Çؼ setrlimit¿¡¼
»ç¿ëµÈ´Ù. µÎ °³ÀÇ Çʵ带 °®´Â´Ù.
rlim_cur
Áú¹®¿¡ ´ëÇÑ Á¦ÇÑÀÇ ÇöÀç°ª.
rlim_max
Áú¹®¿¡ ´ëÇÑ Á¦ÇÑÀÇ ÃÖ´ë Çã¿ë°ª. ´ç½ÅÀº ÀÌ ÃÖ´ë°ª º¸´Ù Å«¼ö·Î Á¦ÇÑÀÇ ÇöÀç°ªÀ» ¼³Á¤ÇÒ ¼ö ¾ø´Ù.
¿ÀÁ÷ ½´ÆÛ À¯Àú¸¸ÀÌ ÃÖ´ë Çã¿ë°ªÀ» º¯°æÇÒ ¼ö ÀÖ´Ù.
getrlimit¿¡¼ ±× ±¸Á¶Ã¼´Â Ãâ·ÂÀ¸·Î¼, ÇöÀç°ªµéÀ» ¹Þ´Â´Ù. setrlimit¿¡¼ ±× ±¸Á¶Ã¼´Â »õ·Î¿î °ªµé
À» Á¤Çϴµ¥ »ç¿ëµÈ´Ù. ´ç½ÅÀÌ Á¦ÇÑÀ» Á¤ÇÒ ¼ö ÀÖ´Â ÀÚ¿øÀÇ ¸®½ºÆ®ÀÌ´Ù. ±×µéÀº ¹ÙÀÌÆ®·Î °è»êµÈ Å©
±âÀÌ´Ù.
RLIMIT_CPU
±× ÇÁ·Î¼¼½º°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â cpu timeÀÇ ÃÖ´ë·®. ¸¸ÀÏ À̰ͺ¸´Ù ´õ ±æ°Ô ½ÇÇàÇÑ´Ù¸é, SIGXCPU
¶ó´Â ½ÅÈ£°¡ ¹ß»ýÇÑ´Ù. °ªÀº ÃÊ´ÜÀ§·Î °è»êµÈ °ÍÀÌ´Ù. 21.2.7Àý [Nonstandard Signals] 278 ÆäÀÌÁö
ÂüÁ¶.
RLIMIT_FSIZE
±× ÇÁ·Î¼¼½º°¡ ¸¸µé ¼ö ÀÖ´Â ÆÄÀÏÀÇ ÃÖ´ë Å©±â. À̰ͺ¸´Ù
Å« ÆÄÀÏÀ» ¸¸µé·ÁÇϸé SIGXFSZ¶ó´Â ½ÅÈ£°¡ ¹ß»ýµÈ´Ù.
21.2.7Àý [Nonstandard Siganls] 278 ÆäÀÌÁö ÂüÁ¶.
RLIMIT_DATA
ÇÁ·Î¼¼½º°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍ ¸Þ¸ð¸®ÀÇ ÃÖ´ëÅ©±â.
¸¸ÀÏ ±× ÇÁ·Î¼¼½º°¡ ÀÌ ¾çÀ» ÃʰúÇÏ´Â µ¥ÀÌÅÍ ¸Þ¸ð¸®¸¦
ÇÒ´çÇÏ·Á ½ÃµµÇÏ¸é ±× ÇÒ´çÀº ½ÇÆÐÇÑ´Ù.
RLIMIT_STACK
ÇÁ·Î¼¼½º¸¦ À§ÇÑ ÃÖ´ë ½ºÅØ Å©±â. ¸¸ÀÏ ÇÁ·Î¼¼½º°¡ ÀÌ Å©±âº¸´Ù Å©°Ô ½ºÅÃÀ» È®ÀåÇÏ·Á ½ÃµµÇÑ´Ù¸é,
SIGSEGV ½ÅÈ£°¡ ¹ß»ýµÈ´Ù. 21.2.1Àý [Program Error Signals] 273 ÆäÀÌÁö ÂüÁ¶.
RLIMIT_CORE
ÀÌ ÇÁ·Î¼¼½º°¡ ¸¸µé ¼ö ÀÖ´Â ÃÖ´ë Å©±â ÄÚ¾Æ ÆÄÀÏ. ¸¸ÀÏ ÇÁ·Î¼¼½º°¡ Á¾·áµÇ°í ÄÚ¾îÆÄÀÏÀÌ ¸¸µé¾îÁ³
°í, ÀÌ ÃÖ´ëÅ©±â°¡ ÃæºÐÇÏÁö ¾Ê´Ù¸é, ÄÚ¾ÆÆÄÀÏÀº Àß·ÁÁø´Ù.
RLIMIT_RSS
ÀÌ ÇÁ·Î¼¼½º°¡ ¾òÀ» ¼ö ÀÖ´Â ¹°¸®Àû ¸Þ¸ð¸®ÀÇ ÃÖ´ë·®. ÀÌ ¼öÄ¡´Â ½Ã½ºÅÛ ½ºÄÉÁì·¯¿Í ¸Þ¸ð¸® ÇÒ´çÀÚ
¸¦ À§ÇÑ Á¤º¸°¡ µÈ´Ù; ½Ã½ºÅÛÀº ¸Þ¸ð¸®°¡ ³²¾ÆÀÖ´Â ¾çÀÌ ÀÖÀ» ¶§ ±× ÇÁ·Î¼¼½º¿¡°Ô ´õ ¸¹Àº ¸Þ¸ð¸®
¸¦ ÁÙ ¼öµµ ÀÖ´Ù.
RLIMIT_OPEN_FILES
ÇÁ·Î¼¼½º°¡ °³¹æÇÒ ¼ö ÀÖ´Â ÆÄÀÏÀÇ ÃÖ´ë°³¼ö. ¸¸ÀÏ À̰ͺ¸´Ù ´õ ¸¹ÀÌ °³¹æÇÏ·Á ÇÑ´Ù¸é, EMFILE¶ó
´Â ¿¡·¯Äڵ尡 ¹ß»ýµÈ´Ù. 2.2Àý [Error Codes] 12 ÆäÀÌÁö ÂüÁ¶.
RLIM_NLIMITS
´Ù¸¥ ÀÚ¿ø Á¦ÇÑÀÇ °³¼ö. ¾î´À À¯¿ëÇÑ ÀÚ¿ø ÇÇ¿¬»êÀÚ´Â RLIM_NMLIMITSº¸´Ù ÀûÀ»°ÍÀÓÀÌ Æ²¸²¾ø
´Ù.
»ó¼ö : int RLIM_INFINITY
ÀÌ »ó¼ö´Â setrlimit¿¡¼ Á¦ÇѰªÀ¸·Î »ç¿ëµÉ ¶§ "¹«ÇÑ´ë"ÀÇ °ªÀ» ³ªÅ¸³½´Ù.
ÀÚ¿ø Á¦ÇÑÀ» ¼³Á¤ÇÏ´Â ÇÔ¼ö´Â ulimit¿Í vlimit°¡ ÀÖÁö¸¸ ¿©±â¼ ¼³¸íµÇÁö ¾Ê¾Ò´Ù. vlimit´Â
`sys/vlimit.h'¿¡ ¼±¾ðµÇ¾î ÀÖ°í BSD·ÎºÎÅÍ ¿Ô´Ù.
17.7 ÇÁ·Î¼¼½º ¿ì¼±±Ç.
¿©·¯°³ÀÇ ÇÁ·Î¼¼½ºµéÀÌ ½ÇÇàÇÏ·Á ½ÃµµµÉ ¶§, ±×µé °¢°¢ÀÌ °¡Áø ¿ì¼±±ÇÀÌ ±× ÇÁ·Î¼¼½º°¡ °¡Á®°¥
CPUÀÇ ºÐÇÒÀ» °áÁ¤ÇÑ´Ù. ÀÌ ÀýÀº ´ç½ÅÀÌ ¾î¶»°Ô ÇÁ·Î¼¼½ºÀÇ ¿ì¼±±ÇÀ» ¾Ë¾Æ³»°í ¼³Á¤ÇÒ ¼ö ÀÖ´ÂÁö
¸¦ ¼³¸íÇÑ´Ù. À̵é ÇÔ¼öµé°ú ¸ÅÅ©·Î ¸ðµÎ´Â `sys/resource.h¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
À¯¿ëÇÑ ¿ì¼±±Ç°ªµéÀÇ ¹üÀ§´Â ¿î¿µÃ¼Á¦¿¡ ÀÇÁ¸µÇÁö¸¸, ÀϹÝÀûÀ¸·Î -20¿¡¼ 20±îÁö¿¡¼ ½ÇÇàµÈ´Ù.
³·Àº ¿ì¼±±Ç°ªÀº ±× ÇÁ·Î¼¼½º°¡ ´õ ÀÚÁÖ ½ÇÇàµÊÀ» ÀǹÌÇÑ´Ù. ÀÌµé »ó¼öµéÀº ¿ì¼±±Ç °ªµéÀÇ ¹üÀ§¸¦
¼³¸íÇÑ´Ù.
PRIO_MIN
À¯¿ëÇÑ ¿ì¼±±ÇÀÇ °¡Àå ÀÛÀº°ª.
PRIO_MAX
À¯¿ëÇÑ ¿ì¼±±ÇÀÇ °¡Àå Å«°ª.
** ¿ªÀÚÁÖ : ¿ø¼¿¡´Â PRIO_MAX¿¡ The smallest¶ó°í µÇ¾î ÀÖ¾ú½À´Ï´Ù. ÇÏÁö¸¸ Àú´Â Ʋ·È´Ù´Â ÆÇ
´ÜÀ» °®°í largest¶ó°í °íÃÆÀ½À» ¾Ë·Á µå¸³´Ï´Ù.
ÇÔ¼ö : int getpriority(int class, int id)
ÇÁ·Î¼¼½ºµé classÀÇ ¿ì¼±±ÇÀ» Àд´Ù; class¿Í id´Â ¹Ø¿¡ ÀÖ´Â °Í Áß¿¡ ÇѰ¡Áö·Î Á¤ÇÑ´Ù. ¼º°øÇϸé
¸®ÅϰªÀ» ¿ì¼±±Ç°ªÀ̰í, ½ÇÆÐÇϸé -1À» ¸®ÅÏÇÑ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ÇÔ¼ö¿¡¼ °¡´ÉÇÑ ¿¡·¯»óȲÀÌ
´Ù.
ESRCH
class¿Í idÀÇ Á¶ÇÕÀÌ ÇöÁ¸Çϰí ÀÖ´Â ¾î¶² ÇÁ·Î¼¼½º¿Í
µµ ¸ÂÁö°¡ ¾Ê´Â´Ù.
EINVAL
classÀÇ °ªÀÌ À¯¿ëÇÏÁö ¾Ê´Ù.
¸®ÅϰªÀÌ -1ÀÏ ¶§, ±×°ÍÀº ½ÇÆÐÇßÀ½À» ¾Ë¸®°Å³ª, ¶Ç´Â ±×°ÍÀÌ ¿ì¼±±ÇÀÇ °ªÀÌ µÉ ¼ö ÀÖ´Ù. ÀÌ·²¶§¸¦
´ëºñÇÑ Á¤È®ÇÑ ¹æ¹ýÀº getpriority¸¦ È£ÃâÇϱâ Àü¿¡ errno = 0À¸·Î ¼³Á¤À» ÇØ³õÀ¸¸é, ½ÇÆÐ¸¦ ÆÇ´ÜÇÏ´Â
Á¶°ÇÀ¸·Î errno != 0 À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÇÔ¼ö : int setpriority(int class, int id, int priority)
ÇÁ·Î¼¼½ºµé classÀÇ ¿ì¼±±ÇÀ» Àд´Ù(¼³Á¤ÇÑ´Ù.); class ¿Í id´Â ¹Ø¿¡ °ÍÁß¿¡ Çϳª·Î ¼³Á¤ÇÑ´Ù. ¼º°ø
ÇÏ¸é ¸®ÅϰªÀº 0ÀÌ°í ½ÇÆÐÇϸé -1ÀÌ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ÇÔ¼ö¸¦ À§ÇØ Á¤ÀÇµÈ ¿¡·¯»óȲÀÌ´Ù.
** ¿ªÀÚÁÖ : ¿ª½Ã À̰÷¿¡¼µµ ¹®¸Æ»ó Read°¡ ¸ÂÁö°¡ ¾Ê½À´Ï´Ù. Ã¥¿¡´Â Read¶ó°í ³ª¿ÍÀÖÁö¸¸, ÇÔ¼ö
À̸§À̳ª, ´ÙÀ½ ¹®ÀåµéÀ» Âü°í·Î º¸°Çµ¥ Àú´Â SetÀÌ ¸Â´Ù°í »ý°¢ÇÕ´Ï´Ù.
ESRCH
class¿Í idÀÇ Á¶ÇÕÀÌ ÇöÁ¸ÇÏ´Â ¾î¶² ÇÁ·Î¼¼½º¿Íµµ ¸ÂÁö°¡ ¾Ê´Â´Ù.
EINVAL
classÀÇ °ªÀÌ À¯¿ëÇÏÁö ¾Ê´Ù.
EPERM
´ç½ÅÀÌ ´Ù¸¥ »ç¿ëÀÚÀÇ ÇÁ·Î¼¼½ºÀÇ ¿ì¼±±ÇÀ» ¼³Á¤ÇÏ·Á ½ÃµµÇÏ¿´°í, ´ç½ÅÀº ±×°ÍÀ» À§ÇÑ Æ¯±ÇÀ» °¡Áö
Áö ¾Ê¾Ò´Ù.
EACCES
´ç½ÅÀÌ ¾î¶² ÇÁ·Î¼¼½ºÀÇ ¿ì¼±±ÇÀ» ³·Ãß·Á ½ÃµµÇß°í, ´ç½ÅÀº ±×°ÍÀ» ÇÒ¸¸ÇÑ Æ¯±ÇÀÌ ºÎ¿©µÇÁö ¾Ê¾Ò´Ù.
Àμö class¿Í id´Â ÇÔ²² ´ç½ÅÀÌ ¿ì¼±±ÇÀ» Àаųª, ¼³Á¤ÇÒ ÇÁ·Î¼¼½ºÀÇ ÁýÇÕÀ» ¼³Á¤ÇÑ´Ù. À̵éÀº
class¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â °ªµéÀÌ´Ù.
PRIO_PROCESS
ÇÑ ÇÁ·Î¼¼½ºÀÇ ¿ì¼±±ÇÀ» Àаųª ¼³Á¤Ç϶ó. Àμö id´Â ÇÁ·Î¼¼½ºÀÇ IDÀÌ´Ù.
PRIO_PGRP
ÇÑ ÇÁ·Î¼¼½º ±×·ìÀÇ ¿ì¼±±ÇÀ» Àаųª ¼³Á¤Ç϶ó. Àμö id´Â ÇÁ·Î¼¼½º ±×·ì ID ÀÌ´Ù.
PRIO_USER
ÇÑ »ç¿ëÀÚÀÇ ÇÁ·Î¼¼½ºµéÀÇ ¿ì¼±±ÇÀ» Àаųª ¼³Á¤Ç϶ó. Àμö id´Â »ç¿ëÀÚ IDÀÌ´Ù.
¸¸ÀÏ Àμö id°¡ 0À̸é, class¿¡ µû¶ó¼ ÇöÀç ÇÁ·Î¼¼½º, ÇöÀç ÇÁ·Î¼¼½º ±×·ì ¶Ç´Â ÇöÀç »ç¿ëÀÚ¸¦ ³ªÅ¸
³½´Ù.
ÇÔ¼ö : int nice(int increment)
increment·Î ÇöÀç ÇÁ·Î¼¼½ºÀÇ ¿ì¼±±ÇÀ» Áõ°¡½ÃŲ´Ù. ¸®ÅϰªÀº Àǹ̰¡ ¾ø´Ù. ´ÙÀ½Àº niceÇÔ¼ö¿Í °°
Àº ÀÏÀ» ÇÏ´Â ÇÔ¼öÀÌ´Ù. Áï.. niceÀÇ Á¤ÀÇÀÌ´Ù.
int
nice (int increment)
{
int old = getpriority (PRIO_PROCESS, 0);
setpriority (PRIO_PROCESS, 0, old + increment);
}