7 ½ºÆ®¸²¿¡¼ÀÇ ÀÔ/Ãâ·Â
ÀÌ ÀåÀº ½ºÆ®¸²À» ¸¸µé±â À§ÇÑ ÇÔ¼ö¿Í ±×¸®°í ±×µé¿¡°Ô ÀԷ°ú Ãâ·ÂÀ» ¼öÇàÇϱâ À§ÇÑ ÇÔ¼ö¸¦ ¼³¸í Çϰí ÀÖ´Ù. 6Àå[I/O Overview] 57ÆäÀÌÁö¿¡¼ ³íÀÇÇß´ø °Í ó·³ ½ºÆ®¸²Àº ²Ï Ãß»óÀûÀ̰í, ÆÄÀÏ, µð¹Ù À̽º, ¶Ç´Â ÇÁ·Î¼¼½ºÀÇ Åë½Åä³ãÀ» ³ªÅ¸³»´Â °í ¼öÁØÀÇ °³³äÀÌ´Ù.
7.1 ½ºÆ®¸².
¿ª»çÀûÀÎ ÀÌÀ¯·Î, ½ºÆ®¸²À¸·Î Ç¥ÇöµÇ´Â CÀÇ ÀڷᱸÁ¶ ŸÀÔÀº "½ºÆ®¸²"º¸´Ù´Â FILE·Î ºÒ¸®¿öÁ³´Ù. FILE * ŸÀÔÀ¸·Î objectµéÀ» ´Ù·ç´Â ¶óÀ̺귯¸® ÇÔ¼öµéÀÇ ´ëºÎºÐÀº term file pointer¸¦ ½ºÆ®¸²ÀÇ ÀÇ ¹Ì·Î ¶ÇÇÑ »ç¿ëÇϰí ÀÖ´Ù. ÀÌ Àü¹®¾î¸¦ ³Ñ¾î¼± ÀûÀýÇÏÁö ¸øÇÑ È¥¶õÀº ¸¹Àº C°ü·Ã Ã¥µéÀÌ ¼±µµÇϰí ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ ¸Å´º¾óÀº "file"°ú "stream"ÀÇ »ç¿ë¿¡ ÁÖÀǸ¦ ±â¿ïÀÏ °ÍÀÌ´Ù. ¿ÀÁ÷ ±â¼úÀû ºÐº°¾È¿¡ ¼..( ¿©±â¼ term file pointerÀº ¾î¶² ´ÜÀ§¸¦( ÇÑÁÙ, ȤÀº ÇÑ ·¹ÄÚµå, ÇÑ ¹®ÀÚ, ÇÑ ´Ü¾î µîµî..) Æ÷ÀÎÆÃ Çϰí ÀÖ´Â Æ÷ÀÎÅ͸¦ ¸»ÇÏ´Â µí...)
FILE ŸÀÔÀº Çì´õÆÄÀÏ 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
µ¥ÀÌÅÍŸÀÔ: FILE
À̰ÍÀº ½ºÆ®¸² objectµéÀ» ³ªÅ¸³»±âÀ§ÇØ »ç¿ëµÇ´Â µ¥ÀÌÅÍ ÇüÀÌ´Ù. FILE object´Â ÆÄÀÏ À§Ä¡¸¦ ÁöÀû Çϰí, Á¤º¸¸¦ ¹öÆÛ¸µÇÏ´Â °Í°ú °°Àº ÀϵéÀ» Æ÷ÇÔÇÑ, ÆÄÀϰú ¿¬°üµÈ ¸ðµç ³»ºÎÀû Á¤º¸¸¦ °®°í ÀÖ´Ù. °¢ ½ºÆ®¸²Àº ¶ÇÇÑ ferror°ú feof¸¦ »ç¿ëÇØ¼ °Ë»çÇÒ¼ö ÀÖµµ·Ï ¿¡·¯¿Í ÆÄÀÏ ³¡¿¡ ´ëÇÑ Á¤º¸¸¦ °®°í ÀÖ ´Ù.; 7.13Àý [EOF and Errors] 91ÆäÀÌÁö ÂüÁ¶.
FILE objectµéÀº ÀÔ/Ãâ·Â ¶óÀ̺귯¸® ÇÔ¼öµé¿¡ ÀÇÇØ ³»ºÎÀûÀ¸·Î ÇÒ´çµÇ°í, °ü¸®µÈ´Ù. ´ç½ÅÀÌ FILE À̶ó´Â ÇüÀ¸·Î object¸¦ âÁ¶ÇÏ·Á°í ½ÃµµÇÏÁö ¸¶¶ó.; ±×°ÍÀ» ¶óÀ̺귯¸®°¡ Çϵµ·Ï ³»¹ö·ÁµÎ¶ó. ´ç½ÅÀÇ ÇÁ·Î±×·¥µéÀº ¿ÀÁ÷ FILE objects¸¦ Á÷Á¢ ´Ù·ç±â º¸´Ù´Â Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÏ¿© ´Ù·çµµ·Ï ÇØ¾ßÇÑ´Ù.( ±× °ÍÀº FILE * °ú °°´Ù. )
7.2 Ç¥ÁØ ½ºÆ®¸²
´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÇ ¸ÞÀÎ ÇÔ¼ö°¡ ºÒ¸®¿öÁú ¶§, ±×°÷¿¡´Â ÀÌ¹Ì ¿±âµµ ÇÏ°í »ç¿ëµµ ÇÒ¼ö ÀÖ´Â, ¹Ì¸® ¼±¾ðµÈ 3°³ÀÇ ½ºÆ®¸²À» °®°ÔµÈ´Ù. À̰ÍÀº ÇÁ·Î¼¼½º¸¦ À§ÇØ ¸¸µé¾î³õÀº "Ç¥ÁØ"ÀÇ ÀÔ/Ãâ·ÂÀ» Ç¥ÇöÇϱâ À§ÇÔÀÌ´Ù.
ÀÌ ½ºÆ®¸²µéÀº Çì´õÆÄÀÏ 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
º¯¼ö : FILE * stdin
ÀÌ Ç¥ÁØ ÀÔ·Â ½ºÆ®¸²Àº ÇÁ·Î±×·¥ÀÇ ÀÔ·ÂÀ» À§ÇÑ Ç¥ÁØÀÇ ÀÚ¿ø(source)ÀÌ´Ù.
º¯¼ö : FILE * stdout
ÀÌ Ç¥ÁØ Ãâ·Â ½ºÆ®¸²Àº Ç¥ÁØÀÇ ÀÔ·ÂÀ» À§ÇØ »ç¿ëµÈ´Ù.
º¯¼ö : FILE *stderr
ÀÌ Ç¥ÁØ ¿¡·¯ ½ºÆ®¸²Àº ÇÁ·Î±×·¥ÀÇ ¿¡·¯ ¹ß»ý¿¡ ´ëÇÑ ¸Þ½ÃÁö¿Í Áø´Ü¿¡ ´ëÇÑ Á¶¾ðÀ» À§ÇØ »ç¿ëµÈ´Ù.
GNU ½Ã½ºÅÛ¿¡¼ ´ç½ÅÀÌ Á¤ÇÑ ¾î¶² ÆÄÀÏÀ̳ª ÇÁ·Î¼¼½ºµµ ½©¿¡¼ Á¦°øÇÏ´Â ÆÄÀÌÇÁ³ª ¸®´ÙÀÌ·º¼ÇÀ» »ç¿ëÇØ¼ ÀÌ ½ºÆ®¸²µé°ú(Ç¥ÁØ ÀÔ/Ãâ·Â, ¿¡·¯ ½ºÆ®¸²) ÅëÇÒ¼ö ÀÖ´Ù.( ÀÌ ±â´ÉµéÀ» µµ±¸·Î »ç¿ëÇÏ´Â ¿ø ½ÃÀû ½©Àº 9Àå[File System Interface] 123ÆäÀÌÁö¿¡ ¼³¸íµÇ¾î ÀÖ´Ù.) ´ëºÐÀÇ ´Ù¸¥ ¿î¿µÃ¼Á¦´Â ÀÌ¿Í ºñ ½ÁÇÑ ¸ÞÄ«´ÏÁòÀ» Á¦°øÇÏÁö¸¸ À̵éÀ» ¾î¶»°Ô »ç¿ëÇÏ´Â Áö¿¡ ´ëÇÑ ¼¼¹ÐÇÑ ºÎºÐ¿¡¼´Â ¸¹Àº Â÷À̰¡ ÀÖ À»¼ö ÀÖ´Ù.
GNU C ¶óÀ̺귯¸® ¿¡¼´Â stdin, dtdout°ú stderrÀº ´Ù¸¥ ¾î´À º¯¼öµé ó·³ ´ç½ÅÀÌ Á¤ÇÒ¼ö ÀÖ´Â º¸ÅëÀÇ º¯¼öÀÌ´Ù. ¿¹¸¦ µé¾î Ç¥ÁØÃâ·Â¿¡¼ ÆÄÀÏ·Î ¸®´ÙÀÌ·º¼Ç ÇϱâÀ§Çؼ´Â ´ÙÀ½°ú °°ÀÌ ÇÒ¼ö ÀÖ´Ù.
fclose (stdout);
stdout = fopen ("standard-output-file", "w");
»Ó¸¸¾Æ´Ï¶ó, ´Ù¸¥ ½Ã½ºÅÛ¿¡¼´Â stdin, stdout°ú stderrÀº º¸ÅëÀÇ ¹æ¹ýÀ¸·Î ÁöÁ¤ÇÒ¼ö ¾ø´Â ¸¶Å©·Î¶õ °É ±â¾ïÇ϶ó. ±×·¯³ª ´ç½ÅÀº Çϳª¸¦ ´Ý°í, ´Ù½Ã ¿©´Â È¿°ú¸¦ ¾ò±âÀ§ÇØ freopenÀ» »ç¿ëÇÒ¼ö ÀÖ´Ù. ±× °ÍÀº 7.3Àý [Opening Streams] 64ÆäÀÌÁö ÂüÁ¶.
7.3 ½ºÆ®¸² ¿±â
ÇϳªÀÇ ÆÄÀÏÀ» fopenÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¿©´Â °ÍÀº »õ·Î¿î ½ºÆ®¸²À» ¸¸µé°í ÆÄÀϰú ½ºÆ®¸²»çÀÌÀÇ ¿¬°á À» ¸¸µå´Â °ÍÀÌ´Ù. À̰ÍÀº »õ·Î¿î ÆÄÀÏÀ» ¸¸µå´Â °Íµµ Æ÷ÇԵȴÙ.
ÀÌÀý¿¡¼ ¼³¸íµÈ ¸ðµç °ÍÀº Çì´õÆÄÀÏ 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö: FILE * fopen (const char *filename, const char *opentype)
fopenÇÔ¼ö´Â ÀÔÃâ·ÂÀ» À§ÇØ ÆÄÀÏÀ̸§À¸·Î ÆÄÀÏÀ» ¿°í ½ºÆ®¸²¿¡°Ô Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù.
¿©±â¼ opentype Àμö´Â ¹®ÀÚ¿·Î¼ ¾î¶»°Ô ¿·ÁÁø ÆÄÀÏÀ» Á¦¾îÇÏ°í °á°ú¹°·Î ¾ò¾îÁø ½ºÆ®¸²ÀÇ ¼Ó ¼ºÀ» ÁöÁ¤ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ±×°ÍÀº ¹Ýµå½Ã ¾Æ·¡¿Í °°Àº ¹®ÀÚµéÁß Çϳª·Î ½ÃÀÛÇØ¾ßÇѸ¸´Ù.
'r'
¿ÀÁ÷ Àб⠸ðµå·Î Á¸ÀçÇÏ´Â ÆÄÀÏÀ» ¿ ¶§ »ç¿ë
'w'
¿ÀÁ÷ ¾²±â¸ðµå·Î ÆÄÀÏÀ» ¿ ¶§, ¸¸¾à ÀÌ¹Ì ±× ÆÄÀÏÀÌ Á¸ÀçÇÑ´Ù¸é, ÀÌ¹Ì Á¸ÀçÇϰí ÀÖ´Â °ÍÀ» ¾ø¾Ö°í »õ·Î¿î ÆÄÀÏÀ» ¸¸µå´Â°Í°ú °°Àº È¿°ú¸¦ ³½´Ù.
'a'
µ¡ºÙÀÓÀ» À§ÇØ ÆÄÀÏÀ» ¿ ¶§ »ç¿ëÇ϶ó; ±×·² ¶§ ¿ÀÁ÷ ÆÄÀÏÀÇ ³¡¿¡¸¸ ¾²¿©Áø´Ù. ¸¸¾à ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÑ´Ù¸é ±× ¾È¿¡ ÀÌ¹Ì Á¸ÀçÇϰí ÀÖ´Â ³»¿ëÀº º¯ÇÏÁö ¾Ê°í ½ºÆ®¸²ÀÌ ±× ÆÄÀÏÀÇ ³¡¿¡ µ¡ºÐ¿©Áø °Í °ú °°Àº °á°ú¸¦ ³º´Â´Ù. ±×·¯³ª ÆÄÀÏÀÌ ¾øÀ»¶§´Â »õ·Î¿î ÆÄÀÏÀÌ ¸¸µé¾îÁø´Ù.
'r+'
ÀÌ¹Ì Á¸ÀçÇÏ´Â ÆÄÀÏÀ» Àаųª ¾²´Â ÀÛ¾÷À» µ¿½Ã¿¡ ÇϰíÀÚ ÇÒ ¶§ »ç¿ëÇÑ´Ù. ±× ÆÄÀϾȿ¡ ÀÌ¹Ì Á¸Àç Çϰí ÀÖ´Â ³»¿ëÀº º¯ÇÏÁö ¾Ê°í ÆÄÀÏ Æ÷ÀÎÅÍ´Â ÆÄÀÏÀÇ Ã³À½¿¡ Á¸ÀçÇÏ¿© óÀ½ºÎÅÍ ÆÄÀÏÀ» Àаí, ¾µ¼ö ÀÖµµ·Ï ÇÑ´Ù.
'w+'
¾²±â¿Í Àб⸦ µ¿½Ã¿¡ ÇϰíÀÚ ÇÒ ¶§ »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ ¸¸¾à ±× ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÑ´Ù¸é ±× ¾È¿¡ ÀÖ ´Â ³»¿ëÀº ¹«½ÃµÇ°í, Á¸ÀçÇÏ´Â ÆÄÀÏÀÌ ¾ø´Ù¸é »õ·Î¿î ÆÄÀÏÀ» ¸¸µç´Ù.
'a+'
Àаí, µ¡ºÙÀÌ´Â ÀÏÀ» µ¿½Ã¿¡ ÇÏ´Â ÆÄÀÏÀ» ¿°Å³ª ¸¸µé ¶§ »ç¿ëÇÑ´Ù. ¸¸¾à ±× ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÑ´Ù ¸é ÀÌ¹Ì ÀÖ´Â ³»¿ëÀº º¯ÈµÇÁö ¾Ê°í, Á¸ÀçÇÏ´Â ÆÄÀÏÀÌ ¾øÀ¸¸é »õ·Î¿î ÆÄÀÏÀÌ ¸¸µé¾îÁø´Ù. Àбâ À§ÇØ »ç¿ë ÇÒ ¶§ ÆÄÀÏÀÇ Ã³À½ À§Ä¡´Â ÆÄÀÏÀÇ ½ÃÀÛÁ¡ÀÌÁö¸¸ Ãâ·ÂÀº Ç×»ó ÆÄÀÏÀÇ µÚ¿¡ µ¡ºÙ¿©Áø´Ù.
ÀÌó·³, '+'±âÈ£´Â ÀԷ°ú Ãâ·ÂÀ» µ¿½Ã¿¡ ÇÒ¼ö ÀÖµµ·Ï ½ºÆ®¸²¿¡°Ô ¿ä±¸ÇÒ ¶§ »ç¿ëÇÑ´Ù. ANSI¿¡¼ ´Â ±×¿Í °°Àº ½ºÆ®¸²À» »ç¿ëÇÏ¿© Àб⿡¼ ¾²±â¸ðµå·Î º¯ÇÒ ¶§, ȤÀº ±× ¹Ý´ëÀÇ °æ¿ìÀÏ ¶§, ¹Ýµå½Ã fflushÇÔ¼ö¸¦ È£ÃâÇϰųª, fseekó·³ ÆÄÀÏÀÇ À§Ä¡¸¦ Á¤ÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇϱ⸦ ±ÇÀåÇÑ´Ù. ¿Ö³ÄÇÏ¸é ³» ºÎÀûÀÎ ¹öÆÛ°¡ ¾Æ¸¶µµ ºñ¾îÀÖÁö ¾ÊÀ» °ÍÀ̹ǷÎ. GNU C ¶óÀ̺귯¸®´Â ÀÌ·¯ÇÑ Á¦ÇÑÀ» °¡Áö°í ÀÖÁö ¾Ê´Â´Ù; ´ç½ÅÀº ±× ½ºÆ®¸²¿¡°Ô ¾ðÁ¦µçÁö ¾²±â³ª Àб⠸í·ÉÀ» ¸¶À½´ë·Î ÇÒ¼ö ÀÖ´Ù. (fflush¿¡ ´ëÇÑ °Í Àº 7.17Àý [Stream Buffering] 95ÆäÀÌÁö¸¦ ÂüÁ¶. fseek¿¡ ´ëÇÑ °ÍÀº 7.15Àý [File Positioning] 93ÆäÀÌ Áö¸¦ ÂüÁ¶Ç϶ó. )
GNU C ¶óÀ̺귯¸®¿¡¼´Â Àбâ À§ÇÑ ¸ðµå·Î Çϳª¸¦ ´õ ¼±¾ðÇØ ³õ°í ÀÖ´Ù. ±×°ÍÀº ¹®ÀÚ'x'·Î½á ÀÌ °ÍÀº ¸¸¾à ÀÌ¹Ì Á¸ÀçÇÏ´Â ÆÄÀÏÀÌ ÀÖ´Ù¸é ±× ÆÄÀÏÀ» ±×³É ¿©´Â °ÍÀÌ ¾Æ´Ï¶ó ¾Æ¿¹ fopenÇÔ¼ö°¡ ½ÇÆÐÇÏ ´Â °ÍÀ¸·Î ³¡³²À¸·Î½á »õ·Î¿î ÆÄÀÏÀ» ¿¬´Ù´Â »ç½ÇÀ» °Á¶ÇÒ ¶§ »ç¿ëÇÑ´Ù. À̰ÍÀº open ÇÔ¼ö¸¦ »ç¿ë ÇÒ ¶§ ¾²ÀÌ´Â O_EXCL ¿É¼Ç°ú µ¿ÀÏÇÑ µ¿ÀÛÀ» ÇÑ´Ù.
¿±â¸ðµåÁßÀÇ ÇϳªÀÎ ¹®ÀÚ 'b'´Â Ç¥ÁØÀÇ c¾È¿¡ ÀÖ°í, ÅýºÆ® ÇüÅÂÀÇ ½ºÆ®¸²ÀÌ ¾Æ´Ï¶ó ¹ÙÀ̳ʸ® Çü ÅÂÀÇ ½ºÆ®¸²À» ¿ä±¸ÇÒ ¶§ »ç¿ëÇÑ´Ù. ±×·¯³ª À̰ÍÀº POSIX ½Ã½ºÅ۵鿡°Ô´Â ¾Æ¹«·± Â÷À̰¡ ¾ø´Ù( GNU½Ã½ºÅÛÀ» Æ÷ÇÔÇÏ¿© ) ¸¸¾à '+'¿Í 'b'¸¦ µÑ´Ù ¾²¸é ¾î´À ÇÑÂÊÀÇ ¸í·ÉÀ¸·Î ³ª¿Ã¼ö ÀÖ´Ù. 7.14Àý [Binary Streams] 92ÆäÀÌÁö ÂüÁ¶.
¾î´À ¿±â¸ðµå¾ÈÀÇ ¹®ÀÚµéÀ» °£´ÜÈ÷ ¹«½ÃµÈ´Ù. ±×µéÀ» ´Ù¸¥ ½Ã½ºÅÛ¿¡¼¸¸ Àǹ̰¡ ÀÖÀ»¼ö ÀÖ´Ù. ¸¸ ¾à ¿±â°¡ ½ÇÆÐÇÑ´Ù¸é fopen ÇÔ¼ö´Â ³ÎÆ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù.
´ç½ÅÀº °°Àº ÆÄÀÏ»ó¿¡ µ¿½Ã¿¡ ¿©·¯°³ÀÇ ½ºÆ®¸²( ȤÀº ÆÄÀϱâ¼úÀÚ)À» Á¤ÇÒ¼ö ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ¿À Á÷ ÀÔ·Â(Àб⠶ó°í ÇÏ¸é ´õ ½±°Ú³×¿ä..)¿¡¸¸ ÀÌÀÏÀ» ÇÑ´Ù¸é À̰ÍÀº ¿Ã¹Ù¸£°Ô µ¿ÀÛÇÏÁö¸¸ Ãâ·Â(¿ª½Ã ¾²±â..)¿¡ ÀÌ µ¿ÀÛÀ» °¡ÇÒ¶§´Â ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÑ´Ù. 8.5Àý [Stream/Descriptor Precautions] 109Æä ÀÌÁö ÂüÁ¶. À̰ÍÀº ÇϳªÀÇ ÇÁ·Î±×·¥( º¸ÅëÀÌ ¾Æ´Ñ)À̳ª ¿©·¯°³ÀÇ ÇÁ·Î±×·¥( ½±°Ô ÀϾ ¼ö ÀÖ´Ù ) ÀÌ´øÁö °£¿¡ ½ÇÁ¦·Î »ç½Ç·Î ³ªÅ¸³´Ù. ±×·¡¼ µ¿½Ã¿¡ ¾ï¼¼½ºÇÏ´Â °ÍÀ» ÇÇÇϱâÀ§ÇØ ÆÄÀÏ Àá±Ý µµ±¸¸¦ »ç¿ëÇÏ´Â °ÍÀÌ À¯ÀÍÇÒ°ÍÀÌ´Ù.
¸ÅÅ©·Î : int FOPNE__MAX
ÀÌ ¸ÅÅ©·ÎÀÇ °ªÀº Á¤¼ö »ó¼ö Ç¥ÇöÀ¸·Î, µ¿½Ã¿¡ ¿ÀÇÂÇÒ¼ö ÀÖÀ½À» º¸ÁõÇÏ´Â ½ºÆ®¸²ÀÇ ÃÖ¼Ò°¹¼ö¸¦ ³ª Ÿ³½´Ù. ÀÌ »ó¼ö°ªÀº ¼¼ °³ÀÇ Ç¥ÁØ ½ºÆ®¸², stdin, stdout, stderr¿¡¼´Â Àû¾îµµ 8°³ ÀÌ´Ù.
ÇÔ¼ö : FILE * freopen (const char *filename, cnost char *opentype, FILE *stream)
ÀÌ ÇÔ¼ö´Â fclose¿Í fopenÀÇ È¥ÇÕ°ú °°´Ù. ÀÌ ÇÔ¼ö´Â ù°·Î ½ºÆ®¸²¿¡ ÀÇÇØ ÂüÁ¶µÈ ½ºÆ®¸²À» ´Ý´Â µ¥, À̶§ ÀÌ ÇÁ·Î¼¼½º¿¡¼ °ËÃâµÈ ¾î¶² ¿¡·¯µµ ¹«½ÃÇÑ´Ù. ( ¿¡·¯°¡ ¹«½ÃµÇ´Â ÀÌÀ¯´Â ´ç½ÅÀÌ ±× ½ºÆ® ¸²À» »ç¿ëÇÏ¿© ¾î´À Ãâ·ÂÀ» Çß¾ú´Ù¸é ±× Ãâ·Â ½ºÆ®¸²¿¡ freopenÀ» »ç¿ëÇÒ¼ö ¾ø°ÔµÇ±â ¶§¹®ÀÌ´Ù. ) ±× ·¯¸é ÁöÁ¤µÈ ÆÄÀÏÀ̸§À» °¡Áø ÆÄÀÏÀÌ fopen°ú °°Àº ÆÄÀÏ ¿±â ¸ðµå¸¦ °¡Áö°í ¿·ÁÁö
7.4 ½ºÆ®¸² ´Ý±â
fcloseÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ½ºÆ®¸²À» ´ÝÀ» ¶§, ½ºÆ®¸²°ú ÆÄÀÏ»çÀÌÀÇ ¿¬°áÀº Ãë¼ÒµÈ´Ù. ´ç½ÅÀÌ ½ºÆ®¸²À» ´ÝÀºÈÄ¿¡, ±×°Í¿¡ ¾î¶² ºÎ°¡ÀûÀÎ ¸í·ÉÀ» ¼öÇàÇÏ°Ô ÇÒ¼ö ¾ø´Ù.
ÇÔ¼ö : int fclose (FILE *stream)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸²°ú ±×°Í°ú ´ëÀÀÇÏ´Â ÆÄÀϰúÀÇ ¿¬°áÀ» ±ú´Âµ¥ »ç¿ëµÈ´Ù. Ãâ·Â¹öÆÛ¾È¿¡ ÀÖ´Â ³»¿ëÀº ¾²¿©Áö°í, ÀԷ¹öÆÛ¾È¿¡ ÀÖ´Â ³»¿ëÀº ¹ö·ÁÁø´Ù. fcloseÇÔ¼ö´Â ¼º°øÀûÀ¸·Î ÆÄÀÏÀÌ ´ÝÇôÁø °æ¿ì¿¡´Â 0 À» ¸®ÅÏÇϰí, ¿¡·¯°¡ °ËÃâµÈ °æ¿ì¿¡´Â EOF¸¦ ¸®ÅÏÇÑ´Ù.
´ç½ÅÀÌ fcloseÇÔ¼ö¸¦ È£ÃâÇÏ¿© Ãâ·Â ½ºÆ®¸²À» ´ÝÀ» ¶§, ½ÇÁ¦·Î ¾ðÁ¦µçÁö ¿¡·¯µéÀÌ °ËÃâµÉ¼ö Àֱ⠶§ ¹®¿¡ ¿¡·¯¸¦ üũÇÏ´Â °ÍÀº Áß¿äÇÏ´Ù. ¿¹¸¦ µé¾î, fcloseÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¹öÆÛ¿¡ ³²¾ÆÀÖ´Â ³»¿ëÀ» ¾µ ¶§¿¡ Ȥ½Ã, µð½ºÅ©°¡ ´Ù Âù°æ¿ì°¡ ¹ß»ýÇÏ¿© ±×°ÍÀ¸·Î ¿¡·¯°¡ ¹ß»ýÇÒ¼ö ÀÖÀ»Áö ¸ð¸¥´Ù. ½ÉÁö¾î ´ç½Å ÀÌ ¹öÆÛ°¡ ºñ¾îÀÖ´Â °ÍÀ» ¾È °æ¿ì¶óµµ, ¸¸ÀÏ ´ç½ÅÀÌ NFS(Network File System)À» »ç¿ëÇÏ¿© ÆÄÀÏÀ» ´ÝÀ» ¶§ ¿©ÀüÈ÷ ¿¡·¯°¡ ¹ß»ýÇÒ¼ö ÀÖ´Ù.
fcloseÇÔ¼ö´Â 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
¸¸¾à ¸ÞÀÎ ÇÔ¼ö°¡ ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡ ¸®ÅÏÇϰųª, ȤÀº exitÇÔ¼ö°¡ È£ÃâµÈ´Ù¸é ( 22.3.1Àý[Normal Tremination] 320ÆäÀÌÁö ÂüÁ¶), ¸ðµç ¿·ÁÁø ½ºÆ®¸²ÀÚµ¿ÀûÀ¸·Î ´ÝÇôÁø´Ù. ±×·¯³ª ÇÁ·Î±×·¥ÀÌ Á¤»óÀû ÀÌ ¾Æ´Ñ ´Ù¸¥ ¹æ¹ýÀ¸·Î, Á× abortÇÔ¼ö¸¦ È£ÃâÇϰųª( 22.3.4Àý [Aborting a Program] 322ÆäÀÌÁö Âü Á¶), ¾î¶² ½É°¢ÇÑ ½ÅÈ£( 21Àå [Signal Handling] 271ÆäÀÌÁö ÂüÁ¶) °¡ ÀÖ¾î¼ ÇÁ·Î±×·¥ÀÌ Á¾·áµÈ´Ù¸é ¿·ÁÁø ½ºÆ®¸²µéÀº ¿ÏÀüÈ÷ ´ÝÇôÁöÁö ¾ÊÀ» °ÍÀÌ´Ù. ¹öÆÛ¾È¿¡ ÀÖ´Â ³»¿ëµéµµ ºñ¿öÁöÁö ¾Ê°í, ÆÄÀϵéÀº ºÒ¿ÏÀü ÇØÁú °ÍÀÌ´Ù. Á»´õ ¸¹Àº ½ºÆ®¸²ÀÇ ¹öÆÛÈ¿¡ ´ëÇÑ Á¤º¸¸¦ º¸·Á¸é 7.17Àý [Stream Buffering] 95ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó.
7.5 ¹®ÀÚµéÀ̳ª ¶óÀÎÀÇ °£´ÜÇÑ Ãâ·Â
ÀÌ ÀýÀº ¹®ÀÚ³ª ¶óÀÎ ´ÜÀ§ÀÇ Ãâ·ÂÀ» ¼öÇàÇϱâ À§ÇÑ ÇÔ¼öµéÀ» ¼³¸íÇϰí ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀº Çì´õÈÀÏ 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : int fputc (int c, FILE *stream)
ÀÌ fputcÇÔ¼ö´Â ¹®ÀÚ c ¸¦ unsigned charÇüÀ¸·Î º¯È½ÃŰ°í ±×°ÍÀ» ½ºÆ®¸²¿¡ Ãâ·ÂÇÑ´Ù. ¸¸¾à ¿¡·¯ °¡ ¹ß»ýÇϸé EOF¸¦ ¸®ÅÏÇϰí, ±×·¸Áö ¾ÊÀ¸¸é ¹®ÀÚ c °¡ Ãâ·ÂµÈ´Ù.
ÇÔ¼ö : int putc (int c, FILE *stream)
ÀÌ ÇÔ¼ö´Â ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼ ¼Óµµ¸¦ ºü¸£°Ô ÇϱâÀ§ÇØ ¸ÅÅ©·Î·Î ½ÇÇàµÈ´Ù´Â °ÍÀ» Á¦¿ÜÇϰí´Â fputc¿Í °°´Ù. ¿©·¯°³ÀÇ Àμöº¸´Ù´Â ÇϳªÀÇ Àμö·Î À̰ÍÀ» Æò°¡ÇÒ ¶§ ±×·± °á°ú¿¡ À̸¥´Ù. ±×·¡¼ putc´Â º¸Åë ´ÜÀÏ ¹®ÀÚ¸¦ Ãâ·ÂÇϴµ¥ »ç¿ëÇϱ⿡´Â °¡Àå ÁÁÀº ÇÔ¼öÀÌ´Ù.
ÇÔ¼ö : int putchar (int c)
putchar ÇÔ¼ö´Â putcÇÔ¼ö°¡ ½ºÆ®¸²ÀÇ Àμö·Î stdoutÀ» »ç¿ëÇÒ¶§´Â µ¿µîÇÏ´Ù.
ÇÔ¼ö : int fputs( const char *s, FILE *stream)
ÀÌ ÇÔ¼ö´Â ÆÄÀÏ ½ºÆ®¸²¿¡ ¹®ÀÚ¿ s¸¦ Ãâ·ÂÇÑ´Ù. Á¾·á¹®ÀÚ·Î null¹®ÀÚ°¡ ¾º¿©ÁöÁö ¾Ê´Â´Ù. ÀÌÇÔ¼ö´Â newline characterµµ ´õÇÏÁö ¾Ê°í, ¿ÀÁ÷ ¹®ÀÚ¿¾È¿¡ ÀÖ´Â ¹®Àڵ鸸 Ãâ·ÂÇÑ´Ù.
ÀÌ ÇÔ¼ö´Â ¿¡·¯°¡ ¹ß»ýÇϸé EOF¸¦ ¸®ÅÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é À½ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÑ´Ù.
¿¹¸¦ µé¾î:
fputs ("Are ", stdout);
fputs ("you ", stdout);
fputs ("hungry?\n", stdout);
ÀÌ·¸°Ô Çϸé Ãâ·ÂÀº »õ·Î¿î ÁÙÀÌ Çϳª µû¸£´Â 'Are you hungry?'°¡ µÈ´Ù.
ÇÔ¼ö : int puts (const char *s)
putsÇÔ¼ö´Â Ç¥ÁؽºÆ®¸² stdout¿¡ newline¹®ÀÚ°¡ ºÙ¾îÀÖ´Â ¹®ÀÚ¿ s¸¦ Ãâ·ÂÇÑ´Ù. ½ºÆ®¸µÀÇ Á¾·á ³Î¹® ÀÚ´Â Ãâ·ÂµÇÁö ¾Ê´Â´Ù. putsÇÔ¼ö´Â °£´ÜÇÑ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϴµ¥ °¡Àå Æí¸®ÇÑ ÇÔ¼öÀÌ´Ù. ¿¹¸¦ µé¾î:
puts ("This is a message.");
ÇÔ¼ö : int putw (int w, FILE *stream)
ÀÌ ÇÔ¼ö´Â ¿öµå w(¿öµå¶õ ¹ÙÀÌÆ®ÀÇ ¹è°¡ µÇ´Â °³³äÀÌ´Ï ÇüÀ¸·Î µûÁö¸é int°¡ µÇÁÒ..)¸¦ ½ºÆ®¸²¿¡ Ãâ ·ÂÇÑ´Ù. ÀÌ ÇÔ¼ö´Â SVID¿ÍÀÇ È£È¯¼ºÀ» À§Çؼ Á¦°øµÇÁö¸¸ ¿ì¸®´Â ´ë½Å¿¡ fwrite¸¦ »ç¿ëÇÑ´Ù. (7.12Àý [Block Input/Output] 91ÆäÀÌÁö ÂüÁ¶)
7.6 ¹®ÀÚ ÀÔ·Â
ÀÌ ÀýÀº ¹®ÀÚ¿Í ¶óÀÎ ´ÜÀ§ÀÇ ÀÔ·ÂÀ» ¼öÇàÇϱâ À§ÇÑ ÇÔ¼ö¸¦ ¼³¸íÇÑ´Ù. ÀÌ ÇÔ¼öµéÀº Çì´õÈÀÏ 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : int fgetc (FILE *stream)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸²ÀÎ ½ºÆ®¸²¿¡¼ unsigned char ÇüÀ¸·Î ´ÙÀ½ ¹®ÀÚ¸¦ ÀÐ°í ±× °ªÀ» int ÇüÀ¸·Î º¯È ½ÃÄÑ ¸®ÅÏÇÑ´Ù. ¸¸¾à ÆÄÀÏ¿¡ ³¡ÀÎ À̸£°Å³ª Àб⠿¡·¯°¡ ³ª¸é EOF¸¦ ¸®ÅÏÇÑ´Ù.
ÇÔ¼ö : int getc (FILE *stream)
ÀÌ ÇÔ¼ö´Â ¿©·¯°³ÀÇ Àμö°¡ ¾Æ´Ñ ÇÑ °³ÀÇ Àμö¿¡ Àû¿ëÇÒ ¶§ ´õ ºü¸£°Ô µ¿ÀÛÇϵµ·Ï ¸ÅÅ©·Î·Î µ¿ÀÛ ÇÏ´Â°É Á¦¿ÜÇϰí´Â fgetc¿Í °°´Ù. getcÇÔ¼ö´Â Á¾Á¾ ¾ÆÁÖ ÃÖ´ëÇÑ È°¿ëµÇ¾î¼, º¸Åë ´ÜÀÏ ¹®ÀÚ¸¦ ÀÐÀ» ¶§ »ç¿ëÇÏ¸é °¡Àå ÁÁÀº ÇÔ¼ö´Ù.
ÇÔ¼ö : int getchar (void)
getchar ÇÔ¼ö´Â getcÇÔ¼ö°¡ streamÀÇ Àμö°ªÀ¸·Î stdinÀ» »ç¿ëÇÏ¸é µÎ ÇÔ¼ö´Â µ¿ÀÏÇÑ °ÍÀÌ µÈ´Ù.
À̰÷¿¡ fgetc¸¦ »ç¿ëÇÏ¿© ÀÔ·ÂÀ» ÇàÇÏ´Â ÇÔ¼ö¸¦ º¸¿©ÁÖ´Â ¿¹°¡ ÀÖ´Ù. fgetc(stdin) ´ë½Å¿¡ getchar()À» »ç¿ëÇϰųª ´ë½Å¿¡ getc¸¦ »ç¿ëÇØ¼ °°Àº °á°ú¸¦ ³»°í ÀÖ´Ù.
int y_or_n_p (const char *question)
{
fputs (question, stdout);
while (1)
{
int c, answer;
/* Áú¹®À¸·Î ºÎÅÍ ´äÀ» ºÐ¸®½ÃŰ½Ã À§ÇØ °ø¹éÀ» Ãâ·ÂÇ϶ó. */
fputc (' ', stdout);
/* ÁÙÀÇ Ã¹ ¹øÂ° ¹®ÀÚ¸¦ Àоî¶ó. À̰ÍÀº ¿øÇÏ´Â ¹®ÀÚÀϼöµµ ÀÖ°í, ¾Æ´Ò¼öµµ ÀÖ´Ù. */
c = tolower (fgetc (stdin));
answer = c;
/* ÀÔ·Â ¶óÀÎÀÇ ³ª¸ÓÁö¸¦ ¹ö·Á¶ó */
while (c != '\n')
c = fgetc (stdin);
/* ¸¸ÀÏ ±×°ÍÀÌ À¯¿ëÇÑ °ÍÀ̶ó¸é ±× ´ä¿¡ º¹Á¾Ç϶ó */
if (answer == 'y')
return 1;
if (answer == 'n')
return 0;
/* ´äÀÌ ¾µ¸ð¾ø´Â °ÍÀ̶ó¸é: À¯¿ëÇÑ ´äÀ» À§Çؼ ¹°¾îº¸¾Æ¶ó */
fputs ("Please answer y or n:", stdout);
}
}
ÇÔ¼ö : int getw (FILE *stream)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸²À¸·Î ÇÑ ¿öµå¸¦( ¾Æ±î.. À§¿¡¼ ¾ê±âÇߴµ¥...´Ù½Ã ã¾Æº¸¼Å¿ë...) Àд´Ù. À̰ÍÀº SVID¿Í ȣȯ¼ºÀ¸·Î À§ÇØ Á¦°øµÈ´Ù. ¿ì¸®´Â ´ë½Å¿¡ freadÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù.( 7.12Àý [Block Input/Output], 91ÆäÀÌÁö ÂüÁ¶ )
7.7 ¶óÀÎ ´ÜÀ§ ÀÔ·Â
¸¹Àº ÇÁ·Î±×·¥µéÀÌ ¶óÀÎÀ» ±âº»À¸·Î ÇØ¼ ÀÔ·ÂÀ» ¹Þ¾ÆµéÀ̹ǷΠ½ºÆ®¸²À¸·ÎºÎÅÍ ÇѶóÀÎÀÇ ÅØ½ºÆ®¸¦ Àд ÇÔ¼ö¸¦ »ç¿ëÇϱ⿡ Æí¸®ÇÏ´Ù.
Ç¥ÁØ C ´Â ÀÌ¿Í °°ÀºÀÏÀ» ÇÏ´Â ÇÔ¼ö¸¦ °¡Áö°í ÀÖÁö¸¸ ±×µéÀÇ »ç¿ë¿¡´Â ¸¹Àº À§ÇèÀÌ µµ»ç¸®°í ÀÖ´Ù; °¡·É ³Î¹®ÀÚ¿Í ½ÉÁö¾î (getsÀÏ °æ¿ì) ±ä ¶óÀÎÀ» È¥µ¿ÇÑ´Ù.±×·¡¼ GNU ¶óÀ̺귯¸®´Â ½Å¿ëÇÒ¼ö ÀÖµµ ·Ï ¶óÀÎÀ» Àбâ À§ÇØ ½±°Ô ¸¸µé¾úÁö¸¸, ÀϹÝÀûÀÌÁö ¾ÊÀº getline ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
´Ù¸¥ GNU È®ÀåÀº getdelimÀ¸·Î getlineÀ» ÀϹÝÈÇÑ °ÍÀÌ´Ù. ±×ÇÔ¼ö´Â Á¤ÇØÁø ÇѰ蹮ÀÚ°¡ ³ªÅ¸³ª±â ±îÁöÀÇ ¸ðµç °ÍÀ» ÀдÂ, Áï ÇѰ谡 ÀÖ´Â ·¹Äڵ带 Àд´Ù. ÀÌ ÇÔ¼öµé ¸ðµÎ´Â 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ ´Ù.
ÇÔ¼ö : ssize_t getline (char **lineptr, size_t *n, FILE *stream)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸²À¸·Î ºÎÅÍ ÀüüÀÇ ¶óÀÎÀ» Àоî¼, ¹öÆÛ¾È¿¡ ÅØ½ºÆ®¸¦ ÀúÀåÇϰí( »õÁÙ°ú ³Î Á¾·á¹® ÀÚ°¡ Æ÷ÇÔµÈ) *lintptr¾È¿¡ ¹öÆÛÀÇ ÁÖ¼Ò¸¦ ÀúÀåÇÑ´Ù.
getline¸¦ È£ÃâÇϱâÀü¿¡, ´ç½ÅÀº malloc·Î ÇÒ´çµÈ *n ¹ÙÀÌÆ®ÀÇ ±æÀ̸¦ °¡Áø ¹öÆÛÀÇ ÁÖ¼Ò¸¦ *lineptr ¿¡ ÁÖ¾î¾ßÇÑ´Ù. ¸¸¾à ÀÌ ¹öÆÛ°¡ ¶óÀÎÀ» ÀúÀåÇϱ⿡ ÃæºÐÈ÷ ±æ¸é, getlineÀº ÀÌ ¹öÆÛ¿¡ ¶óÀÎÀ» ÀúÀå ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, getlineÀº reallocÀ» »ç¿ëÇØ¼ ¹öÆÛ¸¦ Å©°Ô ¸¸µç´ÙÀ½, *lineptr¿¡ »õ·Î¿î ¹öÆÛÀÇ ÁÖ¼Ò¸¦ ÀúÀåÇϰí, *n¾ÈÀÇ Å©±â°¡ Áõ°¡µÈ´Ù. 3.3[Unconstrained Allocation] 22ÆäÀÌÁö¸¦ ÂüÁ¶.
¸¸ÀÏ ´ç½ÅÀÌ getlineÀ» È£ÃâÇϱâÀü¿¡ *lineptrÀ» ³Î Æ÷ÀÎÅÍ·Î ³õ°í, *nÀ» zero¶ó°í Çϸé getlineÀº mallocÀ» È£ÃâÇÏ¿© ¹öÆÛ¸¦ ÇÒ´çÇÑ´Ù. ´Ù¸¥ °æ¿ì, getlineÀº ¸®ÅÏÇÒ ¶§ *lineptrÀº ¶óÀÎ ÅØ½ºÆ®ÀÇ À§Ä¡ ¸¦ °¡¸®Å°°í ÀÖ´Â char * ÀÌ´Ù.
getlineÀÌ ¼º°øÇϸé ÀÐÀº ¹®ÀÚµéÀÇ ¼ö¸¦ ¸®ÅÏÇÑ´Ù( newline¹®ÀÚ´Â Æ÷ÇÔµÇÁö¸¸, ³Î Á¾·á¹®ÀÚ´Â Æ÷ÇÔ µÇÁö ¾ÊÀº ). ÀÌ °ªÀº Á¾·á¸¦ Ç¥½ÃÇϱâ À§ÇØ »ðÀÔµÈ ³Î¹®ÀÚ¿Í ¶óÀÎÀÇ ÀϺκÐÀÇ ÇϳªÀÎ ³Î ¹®ÀÚµé°ú ´Â ±¸º°ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.
À̰ÍÀº GNU È®ÀåÀÌÁö¸¸ ½ºÆ®¸²À¸·ÎºÎÅÍ ¶óÀÎÀ» Àд ¹æ¹ýÀ¸·Î ±ÇÀåµÇ°í ÀÖ´Ù. Ç¥ÁØ ÇÔ¼öµéÀº ¹Ï À»¸¸ ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¸¸¾à ¿¡·¯°¡ ¹ß»ýÇϰųª ÆÄÀÏÀÇ ³¡¿¡ µµ´ÞÇϸé getlineÀº -1À» ¸®ÅÏÇÑ´Ù.
ÇÔ¼ö : ssize_t getdelim (char **lineptr, size_t *n, int delimiter, FILE *stream)
ÀÌ ÇÔ¼ö´Â ÁÙÀÇ ³¡ÀÓÀ» ³ªÅ¸³»´Â newline ¹®ÀÚ°¡ ÇÊ¿äÇÑ ´ë½Å¿¡ ¹®ÀÚ·Î ( ±× ¹®ÀÚ°¡ Ÿ³ª³¯¶§±îÁö ¸ðµç°É Àд ) Á¾·á¸¦ ³ªÅ¸³»´Â°É Á¦¿ÜÇϰí´Â getline°ú °°´Ù. ¿©±â¼ Àμö delimiter¿¡´Â ÇÑ°è ¹®ÀÚ ¸¦ Á¤ÇÑ´Ù; getdelimÀº Á¤ÇØÁø ±× ¹®ÀÚ°¡ º¸À϶§±îÁö Àб⸦ Áö¼ÓÇÑ´Ù.( ¾Æ´Ï¸é ÆÄÀÏÀÇ ³¡±îÁö )
ÅØ½ºÆ®´Â lineptr¾È¿¡ ÀúÀåµÇ°í, ±× ¾È¿¡´Â delimiter(ÇѰè) ¹®ÀÚ¿Í Á¾·á ³Î ¹®ÀÚ°¡ Ç¥ÇѵȴÙ. getline ó·³ getdelimÀº ¸¸¾à lineptrÀÌ ÃæºÐÈ÷ Å©Áö ¾ÊÀ¸¸é ±×°ÍÀ» Å©°Ô ¸¸µç´Ù.
getlineÀº getdelimÀ» ÀÌ¿ëÇÏ¿© ´ÙÀ½Ã³·³ ±¸ÇöÇÒ¼ö ÀÖ´Ù.
ssize_t getline (char **lineptr, size_t *n, FILE *stream)
{
return getdelim (lineptr, n, '\n', stream);
}
/* getlimÀÇ delimiterÀμö¸¦ newline ¹®ÀÚÀÎ '\n'·Î ÁÖ¸é getline°ú °°°ÔµÇ´Â°ÅÁÒ.*/
ÇÔ¼ö : char * fgets (char *s, int count, FILE *stream)
fgetsÇÔ¼ö´Â newline¹®ÀÚ°¡ ³ª¿Ã¶§±îÁö ½ºÆ®¸²À» Àаí, ½ºÆ®¸µ s¿¡ ±×µéÀ» ÀúÀå½Ã۴µ¥, ±×¶§ ½ºÆ® ¸µÀÇ ³¡À» Ç¥½ÃÇϱâ À§ÇØ ³Î ¹®ÀÚ¸¦ ´õÇÑ´Ù. ´ç½ÅÀº ¹®ÀÚ¿ sÀÇ ±æÀ̰¡ µÉ ¹®ÀÚµéÀÇ °³¼ö¸¦ ¾Ë·ÁÁà ¾ß ÇÏÁö¸¸ ÀÐÇôÁö´Â ¹®ÀÚµéÀÇ ¼ö´Â ´ëºÎºÐ count-1ÀÌ´Ù. ³ª¸ÓÁö ÇϳªÀÇ ¹®ÀÚ´Â ½ºÆ®¸µÀÇ ³¡À» Ç¥½Ã Çϱâ À§ÇÑ ³Î Á¾·á¹®ÀÚ¸¦ ÀúÀåÇϴµ¥ ¾²ÀδÙ.
ÀÌ¹Ì ÆÄÀÏÀÇ ³¡±îÁö ÀÐÇôÁ³´Âµ¥ ´Ù½Ã ´ç½ÅÀÌ fgets¸¦ È£ÃâÇÏ¸é ¹®ÀÚ¿ sÀÇ ³»¿ëÀº º¯ÇÏÁö ¾Ê°í, ³Î Æ÷ÀÎÅͰ¡ ¸®ÅϵȴÙ. ¿¡·¯°¡ ¹ß»ýµÆÀ»¶§µµ ³Î Æ÷ÀÎÅÍ´Â ¸®ÅϵȴÙ. ±×·¸Áö ¾ÊÀ¸¸é ¸®ÅϰªÀº Æ÷ÀÎÅÍ s °¡ µÈ´Ù.
ÁÖÀÇ : ¸¸¾à ÀÔ·Â µ¥ÀÌÅͰ¡ ³Î ¹®ÀÚ¶ó¸é, ´ç½ÅÀº ¾Æ¹«°Íµµ ÇÒ¼ö ¾ø´Ù. ±×·¯¹Ç·Î ´ç½ÅÀÌ µ¥ÀÌÅÍ¿¡ ³Î ÀÌ Æ÷ÇÔµÇÁö ¾Ê¾ÒÀ½À» È®½ÅÇÒ¼ö ¾ø´Ù¸é fgets¸¦ »ç¿ëÇÏÁö ¸»¶ó. »ç¿ëÀÚ¿¡ ÀÇÇØ ÆíÁýµÈ ÆÄÀÏÀ» ÀÐÀ» ¶§, fgets¸¦ »ç¿ëÇÏ´Â °ÍÀ» ÇÏÁö ¸»¶ó°í ÇÏ´Â ÀÌÀ¯´Â ¸¸¾à »ç¿ëÀÚ°¡ ³Î ¹®ÀÚ¸¦ Ç¥ÇÔ½ÃÄ×´Ù¸é ´ç½ÅÀÌ ¿¡·¯ ¸Þ½ÃÁö¸¦ ÇÁ¸°Æ® ÇØÁְųª, ¾Æ´Ï¸é ±×°ÍÀÌ °¡´ÉÇϵµ·Ï 󸮸¦ ÇØÁÖ¾î¾ß Çϱ⠶§¹®ÀÌ ´Ù. ¿ì¸®´Â fgets´ë½Å¿¡ getlineÀ» »ç¿ëÇϵµ·Ï ±ÇÀåÇÑ´Ù.
ºñ³¹Þ´Â ÇÔ¼ö: char * gets (char *s)
getsÇÔ¼ö´Â Ç¥ÁØ ½ºÆ®¸² stdinÀ¸·Î ºÎÅÍ ´ÙÀ½ newline¹®ÀÚ°¡ ³ª¿Ã¶§±îÁö ¹®ÀÚµéÀ» Àаí, ±×µéÀ» ¹® ÀÚ¿ s¿¡ ÀúÀåÇÑ´Ù. getsÇÔ¼ö´Â ¾Õ¿¡¼ º¸¿©ÁØ fgets¿Í´Â ´Ù¸£°Ô(fgetsÇÔ¼ö´Â ¹®ÀÚ¿¿¡ newline¹®ÀÚ ¸¦ º¹»çÇÑ´Ù.) newline¹®ÀÚ¸¦ ÃëÇÏÁö ¾Ê°í ¹ö¸°´Ù. ¸¸¾à getsÇÔ¼ö´Â ¿¡·¯°¡ ¹ß»ýÇϰųª ÆÄÀÏÀÇ ³¡¿¡ À̸£¸é ³Î Æ÷ÀÎÅ͸¦ ¸®ÅÏÇϰí, ±×·¸Áö ¾ÊÀº °æ¿ì¿¡´Â ¹®ÀÚ¿ s¸¦ ¸®ÅÏÇÑ´Ù.
getsÇÔ¼ö´Â ¹®ÀÚ¿ s °¡ ¿À¹öÇ÷ο츦 ÀÏÀ¸Å°´Â °æ¿ì¿¡ ´ëºñÇÑ ¾Æ¹«·± º¸È£Ã¥À» Á¦°øÇÏÁö ¾Ê±â ¶§ ¹®¿¡ ¸Å¿ì À§ÇèÇÑ ÇÔ¼öÀÌ´Ù. GNU ¶óÀ̺귯¸® ´ÜÁö ȣȯ¼ºÀ̶ó´Â ¹®Á¦ ¶§¹®¿¡ ÀÌ ÇÔ¼ö¸¦ Á¦°øÇϰí ÀÖÀ» »ÓÀÌ´Ù. ±×·¯¹Ç·Î ´ç½ÅÀº gets´ë½Å¿¡ fgets³ª getlineÀ» »ç¿ëÇ϶ó. ´ç½Ã¿¡°Ô À̰ÍÀ» »ó±â½Ã۱â À§ÇØ ¸µÄ¿´Â( ´ç½ÅÀÌ GNU ld¸¦ »ç¿ëÇÑ´Ù¸é ) ´ç½ÅÀÌ gets¸¦ »ç¿ëÇÒ¶§¸¶´Ù °æ°í¸¦ ³»º¸³¾ °ÍÀÌ´Ù.
7.8 ÀÐÁö ¾Ê±â.
±¸¹®ºÐ¼® ÇÁ·Î±×·¥¿¡¼ ½ºÆ®¸²À¸·Î ºÎÅÍ ¹®ÀÚ¸¦ Áö¿ìÁö ¾Ê°í ÀÔ·Â ½ºÆ®¸²¾È¿¡¼ ´ÙÀ½ ¹®ÀÚ¸¦ ½ÃÇè Çϱ⿡ Á¾Á¾ À¯¿ëÇÏ°Ô ¾²ÀδÙ. ´ç½ÅÀÇ ÇÁ·Î±×·¡¿¡¼ À̰ÍÀ» ÀÐÀ» ¶§ ±×³É Èê±ê º¸´Â°Í°ú °°¾Æ¼ ÀÌ °ÍÀ» "peeking ahead : ¹Ì¸® ¿³º¸±â"¶ó°í ºÎ¸¥´Ù.
I/O ½ºÆ®¸²À» »ç¿ëÇÒ ¶§ ´ç½ÅÀº ¹®ÀÚ¸¦ ÀÏ´Ü ÀÐÀº ´ÙÀ½, ±×°ÍÀ» ´Ù½Ã ÀÐÁö ¾Ê´Â µ¿ÀÛÀ» ÅëÇØ ÀÔ·Â À» ¹Ì¸® ¿³º¼¼ö ÀÖ´Ù.( ¶ÇÇÑ ½ºÆ®¸²¿¡¼ µÚ·Î ¹Ð±â ¶ó°íµµ ºÒ¸°´Ù.) ¹®ÀÚ ÀÐÁö ¾Ê±â( Unreading a character)´Â fgetc³ª ´Ù¸¥ ÀÔ·Â ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§, ½ºÆ®¸²À¸·Î ºÎÅÍ Àü¿¡ ÀÔ·Â ¹Þ¾Ò´ø ¹®ÀÚ¸¦ ´Ù½Ã ÀÔ·Â ¹ÞÀ» ¶§ »ç¿ëÇϱâ À¯¿ëÇѰÍÀÌ´Ù.
¹º ¼Ò¸°Áö Àß ¸ð¸£½Ã°Ú´Ù±¸¿ä....?
À½.. ´ÙÀ½¿¡ UnreadingÀÌ ¹«½¼ ÀǹÌÀÎÁö ³ª¿É´Ï´Ù. ŰŰŰ...
7.8.1 UnreadingÀ̶õ ¹«½¼ ÀǹÌÀΰ¡.
ÀÌÇØ¸¦ µ½±â À§ÇØ ¿©±â ±×¸² ¼³¸íÀÌ ÀÖ´Ù. ´ç½ÅÀÌ ÆÄÀÏ¿¡¼ ÀÐ¾î¼ 6°³ÀÇ ¹®ÀÚ¸¦ °¡Áø ÇÑ °³ÀÇ ½º Æ®¸²À» °®°í ÀÖ´Ù°í °¡Á¤Ç϶ó. ±× ¹®ÀÚ´Â 'foobar'ÀÌ´Ù. ´ç½ÅÀÌ ÀÌ¹Ì 3°³ÀÇ ¹®ÀÚ¸¦ Àоú´Ù°í °¡Á¤ ÇÏ¸é »óȲÀº ´ÙÀ½°ú °°´Ù.:
f o o b a r
^
±×·¯¹Ç·Î ´ÙÀ½ ÀÔ·Â ¹®ÀÚ´Â 'b'°¡ µÉ°ÍÀÌ´Ù.
¸¸ÀÏ 'b'¸¦ Àд ´ë½Å¿¡ 'o'¸¦ unread½ÃŰ¸é »óȲÀº ´ÙÀ½°ú °°´Ù.
f o o b a r
|
o--
^
±×·¡¼ ´ÙÀ½ ÀÔ·Â ¹®ÀÚµéÀº 'o'¿Í 'b'°¡ µÉ °ÍÀÌ´Ù.
¸¸ÀÏ ´ç½ÅÀÌ 'o'´ë½Å¿¡ '9'¸¦ unread ½Ã۸é, »óȲÀº ´ÙÀ½°ú °°ÀÌ º¯ÇÑ´Ù.
f o o b a r
|
9--
^
±×·¯¸é ´ÙÀ½ ÀÔ·Â ¹®ÀÚµéÀº '9'¿Í 'b'°¡ µÈ´Ù.
7.8.2 Unreading Çϱâ À§ÇØ ungetc¸¦ ÀÌ¿ëÇϱâ
¹®ÀÚ¸¦ unreadÇϱâ À§ÇÑ ÇÔ¼ö¸¦ ungetc¶ó°í ºÎ¸£´Âµ¥, ±× ÀÌÀ¯´Â getcÀÇ µ¿ÀÛÀ» µÇµ¹¸®±â ¶§¹®ÀÌ´Ù.
ÇÔ¼ö : int ungetc (int c, FILE *stream)
ungetcÇÔ¼ö´Â ÀÔ·Â ½ºÆ®¸² »ó¿¡¼ ¹®ÀÚ cÀÇ µÚ·Î ¹Ð¾î³õ´Â´Ù. ±×·¡¼ ´ÙÀ½ ÀÔ·ÂÀº ´Ù¸¥ ¾î´À ¹®ÀÚ ¸¦ Àбâ Àü¿¡ c °¡ ÀÐÇôÁú°ÍÀÌ´Ù.
¸¸ÀÏ c°¡ EOFÀ̸é, ungetc´Â ¾Æ¹«Àϵµ ÇÏÁö¾Ê°í ´ÜÁö EOF¸¦ ¸®ÅÏÇÑ´Ù. À̰ÍÀº getc·Î ºÎÅÍ ¿¡·¯ ¸¦ üũÇÏÁö ¾Ê°í getcÀÇ ¸®ÅϰªÀ¸·Î ungetc¸¦ È£ÃâÇϵµ·Ï ÇÑ´Ù.
unreadÇÒ ¹®ÀÚµéÀÌ ½ºÆ®¸²À¸·Î ºÎÅÍ ÀÐÀº ¸¶Áö¸· ¹®ÀÚ¿Í ²À °°À» ÇÊ¿ä´Â ¾ø´Ù. ½ÇÁ¦·Î ungetc·Î ±×µéÀ» unreadÇϱâ Àü¿¡ ½ºÆ®¸²À¸·Î ºÎÅÍ ½ÇÁ¦·Î ÀÐÀº ¾î´À ¹®ÀÚÀÏ Çʿ䰡 ¾ø´Ù´Â °ÍÀÌ´Ù. ( ¾Æ±î ±×¸² ¼³¸í¿¡¼ ¹®ÀÚ'9'¸¦ unreadÇѰͰú °°Àº °ÍÀÌÁÒ... )±×·¯³ª À̰ÍÀº ÇÁ·Î±×·¥À» Ãâ·ÂÀ» À§ÇÑ °Í Ä¡ °í´Â Á» ÀÌ»óÇÑ ¹æ¹ýÀÌ´Ù.; º¸Åë ungetc´Â µ¿ÀÏÇÑ ½ºÆ®¸²À¸·Î ºÎÅÍ Àоú´ø ¹®ÀÚ¸¦ unreadÇϴµ¥ »ç ¿ëÇÑ´Ù.
GNU C ¶óÀ̺귯¸®´Â ¾î¶² ½ºÆ®¸²¿¡ unreadÇÒ ¶§ ¿ÀÁ÷ ÇÑ ¹®ÀÚ¸¸À» Áö¿øÇϰí, »õ·Î¿î ÀÔ·ÂÀ» ¹ÞÀ½ ÀÌ ¾øÀÌ µÎ ¹ø ungetc¸¦ È£ÃâÇÏ´Â °ÍÀ» ±ÝÇÑ´Ù. ´Ù¸¥ ½Ã½ºÅÛµéÀº ¿©·¯°³ÀÇ ¹®ÀÚµéÀ» unreadÇÏ´Â °Í ÀÌ Çã¿ëµÈ´Ù.; ±×·¯¸é ¿ª¼øÀ¸·Î ¹®ÀÚµéÀ» ÀÐÀ»¼ö ÀÖ´Ù´Â °ÍÀÌ µÈ´Ù.
¹®ÀÚµéÀ» µÚ·Î ¹Ð±â( unread¶ó ÇÔÀÌ ´õ ÀÌÇØÇϱ⠽¬¿î °Í °°Àºµ¥...)´Â ÆÄÀÏÀÇ ³»¿ëÀ» º¯È½ÃŰÁö ¾Ê´Â´Ù.; ¿ÀÁ÷ ½ºÆ®¸²À» À§ÇÑ ³»ºÎÀû ¹öÆÛ¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù. ¸¸¾à ÆÄÀϳ»ºÎÀÇ À§Ä¡¸¦ Á¤ÇÏ´Â( fssek ³ª rewind¿Í °°Àº; 7.15Àý [File Positioning] 93ÆäÀÌÁö¸¦ ÂüÁ¶) °ÍÀÌ È£ÃâµÇ¾ú´Ù¸é, ¾ÆÁ÷ ¾²¿©ÁöÁö ¾Ê Àº pushed_back ¹®ÀÚµéÀº ¹ö·ÁÁø´Ù.
ÆÄÀÏÀÇ ³¡¿¡ ÀÖ´Â ½ºÆ®¸²¿¡¼ ¹®ÀÚ¸¦ unread ÇÏ´Â °ÍÀº ½ºÆ®¸²ÀÇ ÆÄÀÏÀÇ ³¡ÀÓÀ» ³ªÅ¸³»´Â Áö½Ã ´Ü ¾î¸¦ Áö¿ì´Âµ¥, ¿Ö³ÄÇÏ¸é ±×°ÍÀ» À¯¿ëÇÑ ÀÔ·Â ¹®ÀÚ·Î ¸¸µé±â ¶§¹®ÀÌ´Ù. ´ç½ÅÀÌ ±× ¹®ÀÚ¸¦ ÀÐÀº ÈÄ¿¡ ´Ù½Ã ÀÐÀ¸·Á°í ½ÃµµÇÏ¸é ÆÄÀÏÀÇ ³¡°ú ´Ù½Ã ¸¸³¯¼ö ÀÖ´Ù.
¿©±â¿¡ °ø¹é¹®ÀÚ¸¦( whitespace characters) °Ç³Ê ¶Ù±â À§ÇØ getc¿Í ungetc¸¦ »ç¿ëÇÏ´Â ¿¹Á¦°¡ ÀÖ ´Ù. ÀÌ ÇÔ¼ö°¡ °ø¹éÀÌ ¾Æ´Ñ ¹®ÀÚ¿¡ µµ´ÞÇÏ¸é ±× ¹®ÀÚ¸¦ unreadÇÏ¿©¼ ´ÙÀ½ Àб⠵¿ÀÛ¿¡¼ ´Ù½Ã ±× ¹®ÀÚ°¡ º¸¿©Áöµµ·Ï ÇÑ´Ù.
#include <stdio.h>
#include <ctype.h>
void skip_whitespace (FILE *stream)
{
int c;
do
/* EOF¸¦ üũÇÒÇʿ䰡 ¾ø´Ù. ¿Ö³ÄÇϸé isspace´Â EOF¸¦ ¹«½ÃÇÏÁö ¾Ê°í ungetc´Â EOF¸¦ ¹«½ÃÇϱ⠶§¹®ÀÌ´Ù. */
c = getc (stream);
while (isspace (c));
ungetc (c, stream);
}
7.9 Çü½ÄÈµÈ Ãâ·Â
ÀÌ Àý¿¡ ±â¼úµÈ ÇÔ¼öµéÀº(printf¿Í °ü·ÃÇÔ¼öµé) Çü½ÄÈµÈ Ãâ·ÂÀ» ¼öÇàÇÏ´Â Æí¸®ÇÑ ¹æ¹ýÀ» Á¦°øÇÑ´Ù. printf¸¦ È£ÃâÇÒ ¶§´Â ³ª¸ÓÁö ÀμöµéÀÇ °ªÀ» Çü½ÄÈÇÏ´Â ¹æ¹ýÀ» ÁöÁ¤ÇÏ´Â Çü½Ä ¹®ÀÚ¿À̳ª ÅÛÇø®Æ® ¹®ÀÚ¿À» »ç¿ëÇÑ´Ù.
´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÌ Çà´ÜÀ§ ¶Ç´Â ¹®ÀÚ ´ÜÀ§ÀÇ Ã³¸®¸¸À» Ưº°È÷ ¼öÇàÇÏ´Â ÇÊÅͰ¡ ¾Æ´Ñ ÀÌ»ó,ÀÌ Àý¿¡ ±â¼úµÇ¾î ÀÖ´Â printf¿Í °ü·Ã ÇÔ¼öµéÀ» »ç¿ëÇÏ´Â °ÍÀÌ Ãâ·ÂÀ» ¼öÇàÇÏ´Â °¡Àå ½±°í »ó¼¼ÇÑ ¹æ¹ýÀÌ µÉ °ÍÀÌ´Ù. ÀÌ ÇÔ¼öµéÀº ¿¡·¯ ¸Þ¼¼Áö,µ¥ÀÌÅÍ Å×ÀÌºí µîÀ» ÇÁ¸°Æ®ÇÏ´Â µ¥¿¡ ƯÈ÷ À¯¿ëÇÏ´Ù.
7.9.1 Çü½ÄÈµÈ Ãâ·ÂÀÇ ±âº»»çÇ×
printf ÇÔ¼ö´Â ¿©·¯ °³ÀÇ Àμö¸¦ ÇÁ¸°Æ®ÇÏ´Â µ¥¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù.´ç½ÅÀÌ È£ÃâÇÒ ¶§¿¡ ÁöÁ¤ÇÑ ÅÛÇà ¸®Æ® ¹®ÀÚ¿ Àμö´Â ºÎ°¡ÀûÀÎ ÀμöÀÇ °¹¼ö¿¡ ´ëÇÑ Á¤º¸»Ó¸¸¾Æ´Ï¶ó ÀμöµéÀÇ ÇüÅÂ¿Í ÀμöµéÀ» ÇÁ¸° Æ®ÇÏ´Â µ¥¿¡ »ç¿ëµÉ ¾ç½Ä¿¡ °üÇÑ Á¤º¸µµ Á¦°øÇÑ´Ù.
ÅÛÇø®Æ® ¹®ÀÚ¿ ³»ÀÇ Åë»óÀûÀÎ ¹®ÀÚµéÀº ´Ü¼øÈ÷ Ãâ·Â ½ºÆ®¸² ±×´ë·Î ÀûÀ¸¸é µÈ´Ù.¹Ý¸é¿¡ ÅÛÇø®Æ®
³»¿¡¼ '%'¹®ÀÚ¿¡ ÀÇÇØ ¼Ò°³µÇ´Â º¯È¯ ÁöÁ¤ÀÚµéÀº ÈÄ¼Ó ÀμöµéÀÌ Ãâ·Â ½ºÆ®¸²À¸·Î Çü½ÄȵǾî¼
¾²¿©Áöµµ·Ï ¸¸µç´Ù. ¿¹¸¦ µé¸é,
int pct = 37;
char filename[] = "foo.txt";
printf (" `%s'ÀÇ Ã³¸®´Â %d%% ¿Ï·áµÊ.\n ±â´Ù·ÁÁÖ¼¼¿ä.\n", filename, pct);
À§ ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀº ÀÌ·¸´Ù.
'foot.txt'ÀÇ Ã³¸®´Â 37% ¿Ï·áµÊ.
±â´Ù·ÁÁÖ¼¼¿ä.
ÀÌ ¿¹´Â '%d' º¯È¯ÀÚÀÇ »ç¿ëÀº int Àμö°¡ ½ÊÁø¼ö·Î ÇÁ¸°Æ®µÇµµ·Ï ÁöÁ¤Çϸç,'%s' º¯È¯ÀÚ´Â ¹®ÀÚ¿ ÀμöÀÇ ÇÁ¸°Æ®¸¦ ÁöÁ¤Çϸç,'%%' ÁöÁ¤ÀÚ´Â ¸®ÅÍ·² '%' ¹®ÀÚÀÇ ÇÁ¸°Æ®¸¦ ÁöÁ¤ÇÔÀ» º¸¿©ÁØ´Ù.
Á¤¼ö Àμö¸¦ 8Áø,10Áø,16ÁøÀÇ ¹«ºÎÈ£ °ªÀ¸·Î (°¢°¢ '%o','%u','%x') ÇÁ¸°Æ® µÇµµ·Ï ÇÏ´Â º¯È¯ÀÚµµ ÀÖ°í, ¹®ÀÚ°ª('%c')À¸·Î ÇÁ¸°Æ®µÇµµ·Ï ÇÏ´Â º¯È¯ÀÚµµ ÀÖ´Ù.
ºÎµ¿¼Ò¼öÁ¡¼ö´Â '%f' º¯È¯ÀÚ¸¦ »ç¿ëÇϸé Á¤»óÀûÀÎ °íÁ¤¼Ò¼öÁ¡¼ö·Î ÇÁ¸°Æ®µÉ ¼ö ÀÖÀ¸¸ç,'%e'º¯È¯ÀÚ ¸¦ »ç¿ëÇϸé Áö¼ö Ç¥±â·Î ÇÁ¸°Æ®µÉ ¼ö ÀÖ´Ù.'%g'º¯È¯ÀÚ´Â '%e'³ª '%f' Çü½ÄÀ» »ç¿ëÇϴµ¥,ƯÁ¤ ¼ý ÀÚÀÇ Å©±â¿¡ ¾î¶² °ÍÀÌ ´õ ÀûÀýÇѰ¡¿¡ ´Þ·ÁÀÖ´Ù.
´ç½ÅÀº '%'¿Í Àû¿ëÇÒ º¯È¯ÀÚ¸¦ ³ªÅ¸³»´Â ¹®ÀÚ »çÀÌ¿¡ ¼ö½Ä¾î¸¦ ½á³ÖÀ½À¸·Î½á Çü½ÄÀ» ´õ »ó¼¼ÇÏ °Ô ÅëÁ¦ÇÒ ¼ö ÀÖ´Ù.À̵éÀº º¯È¯ÀÚÀÇ ÀÏ»óÀûÀÎ ÇàÀ§¸¦ ½±°Ô º¯°æÇÒ ¼ö ÀÖ´Ù.¿¹¸¦ µé¾î,´ëºÎºÐÀÇ º¯ ȯÀÚ ÁöÁ¤Àº ´ç½ÅÀÌ ÃÖ¼ÒÇÑÀÇ ÇÊµå ÆøÀ» ±ÔÁ¤ÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇϸç, ¶ÇÇÑ Çʵ峻¿¡¼ ±× °á°ú¸¦ ¿ÞÆíÀ¸·Î Á¤·Ä ¶Ç´Â ¿À¸¥ÆíÀ¸·Î Á¤·ÄÇÒ °ÍÀΰ¡¸¦ ³ªÅ¸³»´Â Ç÷¡±×¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇÑ´Ù.
Çã¿ëµÈ ƯÁ¤ Ç÷¡±×µé,¼ö½Ä¾îµé°ú ±× ÇØ¼®Àº ƯÁ¤ º¯È¯ÀÚ¿¡ µû¶ó ´Ù¸£´Ù.ÀÌ Á¡Àº ¸ðµÎ ´ÙÀ½ Àå¿¡ »ó ¼¼ÇÏ°Ô ±â¼úµÈ´Ù.À̰ÍÀÌ Ã³À½¿¡ ³Ê¹« º¹ÀâÇÏ°Ô º¸ÀÎ´Ù°í ±Ù½ÉÇÒ ÇÊ¿ä´Â ¾ø´Ù;´ç½ÅÀº ÀüÇô ¼ö½Ä¾îµé À» »ç¿ëÇÏÁö ¾Ê°í¼µµ Ç×»ó ÀÚÀ¯·Î¿î Çü½ÄÀÇ Ãâ·ÂÀ» »ó´çÈ÷ ¾òÀ» ¼ö ÀÖ´Ù. ¼ö½Ä¾îµéÀº ´ëü·Î Ãâ·Â ÀÌ Å×ÀÌºí¿¡¼ "´õ ¿¹»Ú°Ô" º¸À̵µ·Ï ÇÏ·Á°í »ç¿ëµÈ´Ù.
7.9.2 Ãâ·Â º¯È¯ ¹®Àå
ÀÌ ÀýÀº printf ÅÛÇø®Æ® ¹®ÀÚ¿¿¡¼ Ç¥ÇöµÉ ¼ö ÀÖ´Â º¯È¯ ÁöÁ¤ÀÇ »ó¼¼ÇÑ ¹®Àå¿¡ °üÇÑ ¼¼ºÎ»çÇ×À» Á¦°øÇÑ´Ù.
º¯È¯ÀÚ ÁöÁ¤ÀÇ ÀϺκÐÀÌ ¾Æ´Ñ ÅÛÇø®Æ® ¹®ÀÚ¿ ³»ÀÇ ¹®ÀÚµéÀº Ãâ·Â ½ºÆ®¸²¿¡ ±×´ë·Î ÇÁ¸°Æ®µÈ´Ù.¼ö ¹ÙÀÌÆ®ÀÇ ¹®ÀÚ ¿¬¼Ó¹°µéÀÌ(18Àå [È®ÀåµÈ ¹®ÀÚµé],249ÂÊ ÂüÁ¶) ÅÛÇø®Æ® ¹®ÀÚ¿ ³»¿¡¼ Çã¿ëµÈ´Ù.
printf ÅÛÇø®Æ® ¹®ÀÚ¿ ³»¿¡¼ÀÇ º¯È¯ÀÚ ÁöÁ¤Àº ÀϹÝÀûÀÎ ÇüŸ¦ °®´Â´Ù:
% flags width [ . precision ] type conversion
¿¹¸¦ µé¾î,º¯È¯ÁöÁ¤ÀÚ '%-10.8ld'¿¡¼´Â, '-'´Â Ç÷¡±×À̰í,'10'Àº ÇÊµå ÆøÀ» ±ÔÁ¤Çϸç,»ó¼¼ÁöÁ¤Àº '8'À̰í,¹®ÀÚ 'l'Àº Çüź¯È¯ÀÚÀ̸ç,'d'´Â º¯È¯ÀÚ ¾ç½ÄÀ» ±ÔÁ¤ÇÑ´Ù.(ÀÌ Æ¯¼öÇÑ ÇüÅÂÁöÁ¤ÀÚ´Â long int Àμö¸¦ ½ÊÁø¼ö·Î ÇÁ¸°Æ®ÇÔÀ» ³ªÅ¸³»¸ç, ÃÖ¼Ò 10¹®ÀÚ ³ÐÀÌÀÇ Çʵ峻¿¡¼ ÃÖ¼ÒÇÑ 8°³ÀÇ ¼ö¸¦ ¿ÞÆíÀ¸·Î
Á¤·ÄÇÔÀ» ³ªÅ¸³½´Ù.)
´õ »ó¼¼È÷ ¼³¸íÇÏÀÚ¸é, Ãâ·Â º¯È¯ ÁöÁ¤Àº ¾Õ¹®ÀÚ '%'¹®ÀÚ¿Í ÈļÓÀÇ ¹®ÀÚ·Î ±¸¼ºµÈ´Ù:
o º¯È¯ÁöÁ¤ÀÇ Á¤»óÀûÀÎ ÇàÀ§¸¦ º¯°æÇÏ´Â Á¦·Î ¶Ç´Â ±× ÀÌ»óÀÇ Ç÷¡±× ¹®ÀÚµé.
o ÃÖ¼ÒÇÑÀÇ ÇÊµå ÆøÀ» ÁöÁ¤ÇÏ´Â ½ÊÁø Á¤¼ö ¿É¼Ç. Á¤»óÀûÀÎ º¯È¯ÀÌ ÀÌ ¼ýÀÚº¸´Ù ÀûÀº ¹®ÀÚ¸¦ »ý¼ºÇÏ °Ô µÇ¸é,Çʵå´Â ÁöÁ¤µÈ ÆøÀÌ µÉ¶§±îÁö °ø¹éÀ¸·Î ä¿öÁø´Ù.À̰ÍÀº ÃÖ¼Ò°ªÀÌ´Ù;Á¤»óÀûÀÎ º¯È¯ÀÌ ÀÌ ¼ý ÀÚº¸´Ù ¸¹Àº ¹®ÀÚ¸¦ »ý¼ºÇÏ°Ô µÇ¸é,Çʵå´Â Àß¶óÁöÁö ¾Ê´Â´Ù. Á¤»óÀûÀ¸·Î´Â,Ãâ·ÂÀÌ Çʵ峻¿¡¼ ¿À¸¥Æí À¸·Î Á¤·ÄÇÑ´Ù.
´ç½ÅÀº '*'ÀÇ ÇÊµå ÆøÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº Àμö ¸ñ·Ï³»ÀÇ ´ÙÀ½ Àμö(ÇÁ¸°Æ®µÇ´Â ½ÇÁ¦°ª ÀÌÀü) °¡ ÇÊµå ÆøÀ¸·Î »ç¿ëµÊÀ» ÀǹÌÇÑ´Ù.±× °ªÀº int¿©¾ßÇÑ´Ù.¸¸¾à ±× °ªÀÌ À½¼öÀ̸é,À̰ÍÀº '-'Ç÷¡±×(¾Æ·¡ ¸¦ º¸¶ó)¸¦ ¼³Á¤Çؼ ±× Àý´ë°ªÀ» ÇÊµå ÆøÀ¸·Î »ç¿ëÇÔÀ» ÀǹÌÇÑ´Ù.
o ¼ýÀÚ º¯È¯¿¡ ¾²ÀÌ´Â ¼ýÀÚÀÇ °³¼ö¸¦ ÁöÁ¤ÇÏ´Â »ó¼¼ÁöÁ¤ ¿É¼Ç.¸¸¾à »ó¼¼ÁöÁ¤ÀÌ ÁöÁ¤µÇ¸é, ±×°ÍÀº ½Ê ÁøÁ¤¼ö(ºü¶ß¸®°Ô µÇ¸é Á¦·Î·Î ³»Á¤µÈ´Ù)°¡ µÚµû¸£´Â ÇϳªÀÇ ¸¶Ä§Ç¥('.')·Î ÀÌ·ç¾îÁø´Ù.
´ç½ÅÀº '*'ÀÇ »ó¼¼ÁöÁ¤À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº Àμö ¸ñ·Ï³»ÀÇ ´ÙÀ½ Àμö(ÇÁ¸°Æ®µÇ´Â ½ÇÁ¦°ª ÀÌ Àü)°¡ »ó¼¼ÁöÁ¤À¸·Î »ç¿ëµÊÀ» ÀǹÌÇÑ´Ù.±× °ªÀº int¿©¾ß Çϸç,¸¸¾à ±× °ªÀÌ À½¼öÀÌ¸é ¹«½ÃµÈ´Ù.¸¸¾à ´ç½ÅÀÌ ÇÊµåÆø°ú »ó¼¼±ÔÁ¤ ¸ðµÎ¸¦ '*'·Î ÁöÁ¤ÇÏ°Ô µÇ¸é, ÇÊµå Æø Àμö°¡ »ó¼¼±ÔÁ¤ Àμö¿¡ ¾Õ¼±´Ù.´Ù ¸¥ C ¶óÀ̺귯¸® º¯È¯ÀÚµéÀº ÀÌ ¹®ÀåÀ» ÀνÄÇÏÁö ¸øÇÒ °ÍÀÌ´Ù.
o ÇüÅ º¯°æÀÚ ¹®ÀÚ ¿É¼Ç,À̰ÍÀº µ¥ÀÌÅÍ ÇüŰ¡ ³»Á¤ ÇüÅÂ¿Í ´Ù¸¦ °æ¿ì¿¡ »óÀÀÇÏ´Â ÀμöÀÇ µ¥ÀÌÅÍ ÇüŸ¦ ÁöÁ¤Çϱâ À§ÇÏ¿© »ç¿ëµÈ´Ù.(¿¹¸¦ µé¸é, Á¤¼ö º¯È¯ÀÚ´Â int ÇüŸ¦ °¡Á¤ÇÏÁö¸¸, ´ç½ÅÀº ´Ù¸¥ Á¤ ¼ö ÇüŸ¦ À§ÇØ 'h','l'À̳ª 'L'À» ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.)
o Àû¿ëµÉ º¯È¯ÀÚ¸¦ ÁöÁ¤ÇÏ´Â ¹®ÀÚ.
Çã¿ëµÇ´Â Á¤È®ÇÑ ¿É¼Ç°ú ±×°ÍµéÀÌ ÇØ¼®µÇ´Â ¹æ½ÄÀº º¯È¯ ÁöÁ¤ÀÚ°¡ ´Þ¶óÁü¿¡ µû¶ó º¯ÇÑ´Ù.°¢°¢ÀÇ º¯ ȯÀÚ°¡ »ç¿ëÇϴ ƯÁ¤ ¿É¼Ç¿¡ °üÇÑ Á¤º¸´Â °¢ º¯È¯ÀÚÀÇ ¼³¸íÀ» ÂüÁ¶Ç϶ó.
7.9.3 Ãâ·Â º¯È¯ÀÚ Å×À̺í
°¢±â ´Ù¸¥ º¯È¯ÀÚµéÀÌ ÇÏ´Â ÀÏÀ» ¿ä¾àÇØº¸ÀÚ.
`%d', `%i'
Á¤¼ö¸¦ ºÎÈ£ÀÖ´Â ½ÊÁø¼ö·Î ÇÁ¸°Æ®ÇÑ´Ù. 7.9.4 [Á¤¼ö º¯È¯ÀÚ],72ÂÊ ÂüÁ¶,»ó¼¼¼³¸í.'%d'¿Í '%i'´Â Ãâ·Â¿¡ ¼´Â µ¿ÀǾîÀÌÁö¸¸, ÀԷ¿¡¼ scanf¸¦ »ç¿ëÇÒ ¶§´Â ´Ù¸£´Ù.(7.11.3 [ÀÔ·Â º¯È¯ÀÚ Å×À̺í],86ÂÊ ÂüÁ¶)
'%o'
Á¤¼ö¸¦ ºÎÈ£¾ø´Â 8Áø¼ö·Î ÇÁ¸°Æ®ÇÑ´Ù.7.9.4 [Á¤¼ö º¯È¯ÀÚ],72ÂÊ »ó¼¼¼³¸í ÂüÁ¶.
'%u'
Á¤¼ö¸¦ ºÎÈ£¾ø´Â 10Áø¼ö·Î ÇÁ¸°Æ®ÇÑ´Ù.7.9.4 [Á¤¼ö º¯È¯ÀÚ],72ÂÊ »ó¼¼¼³¸í ÂüÁ¶.
'%Z'
Á¤¼ö¸¦ ºÎÈ£¾ø´Â ½ÊÁø¼ö·Î ÇÁ¸°Æ®ÇϵÇ, Á¤¼ö°¡ size_t ÇüÅ·ΠÀü´ÞµÈ °ÍÀ¸·Î °¡Á¤ÇÑ´Ù.7.9.4 [Á¤¼ö º¯È¯ÀÚ],72ÂÊ »ó¼¼¼³¸í ÂüÁ¶.À̰ÍÀº GNU È®ÀåÀÌ´Ù.
`%x', `%X'
Á¤¼ö¸¦ 16Áø¼ö·Î ÇÁ¸°Æ®ÇÑ´Ù. '%x'´Â ¼Ò¹®ÀÚ¸¦ »ç¿ëÇϰí '%X'´Â ´ë¹®ÀÚ¸¦ »ç¿ëÇÑ´Ù.7.9.4[Á¤¼ö º¯È¯ ÀÚ],72ÂÊ »ó¼¼¼³¸í ÂüÁ¶.
'%f'
ºÎµ¿¼Ò¼öÁ¡¼ö¸¦ Á¤»óÀûÀÎ(°íÁ¤¼Ò¼öÁ¡) Ç¥±â·ÎÇÁ¸°Æ®ÇÑ´Ù.7.9.5 [ºÎµ¿¼Ò¼öÁ¡ º¯È¯ÀÚ],74ÂÊ »ó¼¼¼³¸í Âü Á¶.
'%e','%E'
ºÎµ¿¼Ò¼öÁ¡¼ö¸¦ Áö¼ö Ç¥±â·Î ÇÁ¸°Æ®ÇÑ´Ù. '%e'´Â ¼Ò¹®ÀÚ¸¦ »ç¿ëÇϰí '%E'´Â ´ë¹®ÀÚ¸¦ »ç¿ëÇÑ´Ù. 7.9.5 [ºÎµ¿¼Ò¼öÁ¡ º¯È¯ÀÚ],74ÂÊ »ó¼¼¼³¸í ÂüÁ¶.
'%g','%G'
ºÎµ¿¼Ò¼öÁ¡¼ö¸¦ Á¤»óÀûÀÎ ¶Ç´Â Áö¼ö Ç¥±â·Î ÇÁ¸°Æ®Çϴµ¥,±× Å©±â¿¡ µû¶ó ÀûÀýÇÑ °ÍÀ» ¼±ÅÃÇÑ´Ù. '%g'´Â ¼Ò¹®ÀÚ¸¦ »ç¿ëÇϰí '%G'´Â ´ë¹®ÀÚ¸¦ »ç¿ëÇÑ´Ù. 7.9.5 [ºÎµ¿¼Ò¼öÁ¡ º¯È¯ÀÚ],74ÂÊ »ó¼¼¼³¸í Âü Á¶.
'%c'
´ÜÀϹ®ÀÚ¸¦ ÇÁ¸°Æ®ÇÑ´Ù.7.9.6 [¿©Å¸ÀÇ Ãâ·Â º¯È¯ÀÚ],75ÂÊ ÂüÁ¶.
'%s'
¹®ÀÚ¿À» ÇÁ¸°Æ®ÇÑ´Ù.7.9.6 [¿©Å¸ÀÇ Ãâ·Â º¯È¯ÀÚ],75ÂÊ ÂüÁ¶.
'%p'
Æ÷ÀÎÅÍÀÇ °ªÀ» ÇÁ¸°ÅÍÇÑ´Ù.7.9.6 [¿©Å¸ÀÇ Ãâ·Â º¯È¯ÀÚ],75ÂÊ ÂüÁ¶.
'%n'
ÇÁ¸°Æ®µÉ ¹®ÀÚÀÇ °¹¼ö.7.9.6 [¿©Å¸ÀÇ Ãâ·Â º¯È¯ÀÚ],75ÂÊ ÂüÁ¶.ÀÌ º¯È¯ÀÚ ÁöÁ¤Àº ¾î¶² Ãâ·Âµµ »ý¼ºÇÒ ¼ö ¾øÀ½¿¡ ÁÖÀÇÇ϶ó.
'%m'
errno °ª¿¡ ÀÏÄ¡ÇÏ´Â ¹®ÀÚ¿À» ÇÁ¸°Æ®ÇÑ´Ù.(À̰ÍÀº GNU È®ÀåÀÌ´Ù.) 7.9.6 [¿©Å¸ÀÇ Ãâ·Â º¯È¯ÀÚ],75ÂÊ
ÂüÁ¶.
'%%'
¸®ÅÍ·² '%' ¹®ÀÚ¸¦ ÇÁ¸°Æ®ÇÑ´Ù.7.9.6 [¿©Å¸ÀÇ Ãâ·Â º¯È¯ÀÚ],75ÂÊ ÂüÁ¶.
º¯È¯ÀÚ ÁöÁ¤ ¹®ÀåÀÌ À¯È¿ÇÏÁö ¾Ê´Ù¸é, ¿¹»óÄ¡ ¸øÇÑ °á°ú°¡ ÀϾ °ÍÀÌ´Ù.±×·¯¹Ç·Î ±×·¸°Ô ÇÏÁö ¸» ¾Æ¾ß ÇÑ´Ù.¸¸¾à ÅÛÇø®Æ® ¹®ÀÚ¿ ³»ÀÇ ¸ðµç º¯È¯ÀÚ ÁöÁ¤À» À§ÇÑ °ªµéÀ» °ø±ÞÇÏ´Â ÇÔ¼öÀÇ ÀμöµéÀÌ ÃæºÐÄ¡ ¸øÇϰųª,¶Ç´Â ÀμöµéÀÇ ÇüŰ¡ Á¦´ë·Î µÇÁö ¸øÇÏ¿´´Ù¸é,±× °á°ú´Â ¿¹ÃøÇÒ ¼ö ¾ø´Ù.¸¸¾à ´ç½Å ÀÌ º¯È¯ÀÚ ÁöÁ¤º¸´Ùµµ ¸¹Àº ÀμöµéÀ» ÁÖ°Ô µÇ¸é,³²´Â Àμö°ªµéÀº ±×´ë·Î ¹«½ÃµÈ´Ù;À̰ÍÀº °¡²û À¯¿ë ÇÏ´Ù.
7.9.4 Á¤¼ö º¯È¯ÀÚ
ÀÌ Àý¿¡¼´Â `%d', `%i', `%o', `%u', `%x', `%X' ¿Í `%Z' º¯È¯ÀÚ ÁöÁ¤À» À§ÇÑ ¿É¼Ç¿¡ ´ëÇØ ±â ¼úÇÑ´Ù.ÀÌµé º¯È¯ÀÚµéÀº Á¤¼öµéÀ» ´Ù¾çÇÑ Çü½ÄÀ¸·Î ÇÁ¸°Æ®ÇÑ´Ù.
'%d'¿Í '%i' º¯È¯ÀÚ ÁöÁ¤Àº ¸ðµÎ int Àμö¸¦ ºÎÈ£ÀÖ´Â ½ÊÁø¼ö·Î ÇÁ¸°Æ®ÇÑ´Ù;¹Ý¸é¿¡ '%o','%u'¿Í '%x'´Â Àμö¸¦ ºÎÈ£¾ø´Â 8Áø,10Áø,16Áø¼ö·Î ÇÁ¸°Æ®ÇÑ´Ù(°¢°¢).'%X'º¯È¯ÀÚ ÁöÁ¤Àº ¹®ÀÚ 'abcdef' ´ë½Å ¿¡ ¼ýÀڷμ ¹®ÀÚ'ABCDEF'¸¦ »ç¿ëÇÏ´Â Á¡À» Á¦¿ÜÇϰí´Â '%x'¿Í °°´Ù.'%Z'´Â '%u'¿Í °°À¸³ª,size_t ÇüÅÂÀÇ Àμö¸¦ ±â´ëÇÑ´Ù.
´ÙÀ½ÀÇ Ç÷¡±×µéÀÌ À¯ÀǹÌÇÏ´Ù:
'-'
Çʵ峻¿¡¼(Á¤»óÀûÀÎ ¿À¸¥Æí Á¤·Ä ´ë½Å¿¡) °á°ú¸¦ ¿ÞÆí Á¤·ÄÇÑ´Ù.
'+'
ºÎÈ£ÀÖ´Â '%d'¿Í '%i' º¯È¯ÀÚ¿¡¼,¸¸¾à ±× °ªÀÌ ¾ç¼öÀ̸é Ç÷¯½º ºÎÈ£¸¦ ÇÁ¸°Æ®ÇÑ´Ù.
` '
ºÎÈ£ÀÖ´Â '%d'¿Í '%i' º¯È¯ÀÚ¿¡¼,¸¸¾à ±× °á°úÄ¡°¡ Ç÷¯½º ¶Ç´Â ¸¶À̳ʽº ºÎÈ£·Î ½ÃÀÛÇÏÁö ¾Ê´Â´Ù ¸é, ±× ´ë½Å¿¡ °ø¹é¹®Àڷνá ÈĹ̸¦ ä¿î´Ù.'+' Ç÷¡±×´Â ±× °á°ú°¡ ºÎÈ£¸¦ Æ÷ÇÔÇÏ´Â °ÍÀ» º¸ÁõÇϱ⠶§¹®¿¡, ¸¸¾à ´ç½ÅÀÌ µÎ ºÎÈ£¸¦ ¸ðµÎ °ø±ÞÇÏ°Ô µÇ¸é ÀÌ Ç÷¡±×´Â ¹«½ÃµÈ´Ù.
'#'
'%o' º¯È¯ÀÚ¿¡¼,À̰ÍÀº ¸¶Ä¡ »ó¼¼ÁöÁ¤À» Áõ°¡½ÃŰ´Â °Íó·³ ¾ÕÀÇ ¼ýÀÚ¸¦ '0'À¸·Î ä¿î´Ù. '%x'³ª '%X'¿¡¼´Â À̰ÍÀÌ °á°ú°ª¿¡ ¾ÕÀÇ ¼ýÀÚ '0x'³ª '0X'¸¦(°¢°¢) ºÙ¿©ÁØ´Ù.À̰ÍÀº '%d','%i'³ª '%u' º¯ ȯÀÚ¿¡ ´ëÇØ¼´Â ¾Æ¹«·± ¼Ò¿ëµµ ¾ø´Ù.ÀÌ Ç÷¡±×¸¦ »ç¿ëÇÏ°Ô µÇ¸é strtoulÇÔ¼ö(14.7.1 [Á¤¼öÀÇ ÇØ ºÎ],213ÂÊ ÂüÁ¶)¿Í '%i' º¯È¯ÀÚÀ» °®´Â scanf ÇÔ¼ö(7.11.4 [¼öÄ¡ ÀÔ·Â º¯È¯ÀÚ],87ÂÊ ÂüÁ¶)¿¡ ÀÇÇØ ÇØºÎ µÉ ¼ö ÀÖ´Â Ãâ·ÂÀÌ »ý¼ºµÈ´Ù.
'0' Çʵ带 °ø¹é ´ë½Å¿¡ ¿µ(çÍ)À¸·Î ä¿î´Ù. ¿µÀº ¾î¶² ºÎÈ£³ª Áø¼öÀÇ ÁöÁ¤ µÚ¿¡ À§Ä¡ÇÑ´Ù.ÀÌ Ç÷¡ ±×´Â ¸¸¾à '-' Ç÷¡±×°¡ ÁöÁ¤µÇ°Å³ª »ó¼¼ÁöÁ¤ÀÌ ÁöÁ¤µÇ¸é ¹«½ÃµÈ´Ù.
¸¸¾à »ó¼¼ÁöÁ¤ÀÌ ÁÖ¾îÁö¸é,±×°ÍÀº ³ªÅ¸³¯ ¼ýÀÚÀÇ ÃÖ¼Ò°¹¼ö¸¦ ÁöÁ¤ÇÑ´Ù;¾Õ¿¡ ¿À´Â ¿µµéÀº ÇÊ¿äÇÏ¸é »ý°Ü³´Ù. ¸¸¾à ´ç½ÅÀÌ »ó¼¼ÁöÁ¤À» ÇÏÁö ¾Ê´Â´Ù¸é,¼öÄ¡´Â ÇÊ¿äÇÑ ¸¸ÅÀÇ ¼ýÀÚ·Î ÇÁ¸°Æ®µÈ´Ù.¸¸¾à ´ç ½ÅÀÌ ¿µÀÇ ¸í½ÃÀûÀÎ »ó¼¼ÁöÁ¤À¸·Î ¿µÀÇ °ªÀ» º¯È¯½ÃŰ°Ô µÇ¸é, ¾î¶² ¹®ÀÚµµ ¸¸µé¾îÁöÁö ¾Ê´Â´Ù.
ÇüÅ º¯°æÀÚ°¡ ¾øÀ» ¶§¿¡´Â »óÀÀÇÏ´Â Àμö´Â int (ºÎÈ£ÀÖ´Â º¯È¯ÀÚ '%i'¿Í '%d')·Î Ãë±ÞµÇ°Å³ª unsigned int(ºÎÈ£¾ø´Â º¯È¯ÀÚ '%o','%u','%x'¿Í '%X')·Î Ãë±ÞµÈ´Ù. printf¿Í °ü·ÃÇÔ¼öµéÀº variadic ÇØ¼ ¾î¶² char¿Í ªÀº ÀμöµéÀº ³»Á¤ Àμö 󸮿¡ ÀÇÇØ ÀÚµ¿ÀûÀ¸·Î int·Î º¯È¯µÊÀ» ±â¾ïÇÏÀÚ.´Ù¸¥ Á¤¼ö ÇüÅÂÀÇ Àμö¿¡ ´ëÇØ¼ ´ç½ÅÀº ÀÌµé º¯°æÀÚµéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
'h'
´Â Àμö°¡ short int ³ª unsinged short int¿¡ ÀûÇÕÇϵµ·Ï ÁöÁ¤ÇÑ´Ù.ªÀº Àμö´Â ³»Á¤ Àμö 󸮿¡ ÀÇÇØ ¾î¶»°Ôµç int ³ª unsigned int·Î º¯È¯µÇÁö¸¸, 'h' º¯°æÀÚ´Â ±×°ÍÀ» ´Ù½Ã ªÀº Á¤¼ö·Î º¯È¯ÇÑ´Ù.
'l'
Àº Àμö°¡ long int³ª unsigned long int¿¡ ÀûÇÕÇϵµ·Ï ÁöÁ¤ÇÑ´Ù.
'L'
Àº Àμö°¡ long long intÀ̵µ·Ï ÁöÁ¤ÇÑ´Ù.(ÀÌ ÇüÅ´ GNU C ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ Áö¿øµÇ´Â È®ÀåÀÌ´Ù. extra-long Á¤¼öµéÀ» Áö¿øÇÏÁö ¾Ê´Â üÁ¦¿¡¼´Â À̰ÍÀº long int¿Í °°´Ù.)
Àμö ÇüÅ º¯°æÀÚ´Â '%Z'¿¡´Â Àû¿ëÇÒ ¼ö ¾ø´Ù. ¿Ö³ÄÇϸé, '%Z'ÀÇ À¯ÀÏÇÑ ¸ñÀûÀº µ¥ÀÌÅÍ ÇüÅ size_t¸¦ ÁöÁ¤ÇÏ´Â °ÍÀ̱⠶§¹®ÀÌ´Ù.
¿¹¸¦µé¾î º¸ÀÚ. ÅÛÇø®Æ® ¹®ÀÚ¿
"|%5d|%-5d|%+5d|%+-5d|% 5d|%05d|%5.0d|%5.2d|%d|\n"
À» »ç¿ëÇϸé, '%d'º¯È¯ÀÚ¿¡ ´ëÇÑ ´Ù¸¥ ¿É¼ÇµéÀ» »ç¿ëÇÏ¿© ¼öÄ¡¸¦ ÇÁ¸°Æ®Çغ¸¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ ¾ò´Â´Ù:
| 0
1 -1 100000 |
0
1 -1 100000 |
+0
+1 -1 +100000 |
+0
+1 -1 100000 |
0
1 -1 100000 |
00000
00001 -0001 100000 |
1
-1 100000 |
00
01 -01 100000 |
0
1 -1 |
ƯÈ÷,¸¶Áö¸·ÀÇ °æ¿ì´Â ¼öÄ¡°¡ ÁöÁ¤µÈ ÃÖ¼Ò ÇÊµå Æø¿¡ ºñÇØ ³Ê¹« Å©±â ¶§¹®¿¡ ¹ß»ýÇÏ¿´À½À» ÁÖÀÇÇ϶ó.
ÅÛÇø®Æ® ¹®ÀÚ¿
"|%5u|%5o|%5x|%5X|%#5o|%#5x|%#5X|%#10.8x|\n"À»
»ç¿ëÇÏ¿©,´Ù¾çÇÑ ¿É¼ÇÀ¸·Î ºÎÈ£¾ø´Â Á¤¼ö¸¦ ÇÁ¸°Æ®ÇÑ °æ¿ì¸¦ º¸¿©ÁÖ´Â ¸î°³ÀÇ ¿¹¸¦ º¸±â·Î ÇÏÀÚ.
| 0
1 100000 |
0
1 303240 |
0
1 186a0 |
0
1 186A0 |
0
01 0303240 |
0x0
0x1 0x186a0 |
0X0
0X1 0X186A0 |
0x00000000
0x00000001 0x000186a0 |
7.9.5 ºÎµ¿¼Ò¼öÁ¡ º¯È¯ÀÚ
ÀÌ Àý¿¡¼´Â ºÎµ¿¼Ò¼öÁ¡¼ö¿¡ ´ëÇÑ º¯È¯ÀÚ ÁöÁ¤¿¡ ´ëÇØ ³íÀÇÇÑ´Ù: `%f', `%e', `%E', `%g'¿Í `%G' º¯È¯ÀÚ.
'%f'
º¯È¯ÀÚ´Â ±× Àμö¸¦ °íÁ¤¼Ò¼öÁ¡ Ç¥±â·Î ÇÁ¸°Æ®Çϸç,[-]ddd.ddd ÇüÅ·ΠÃâ·ÂÀ» »ý¼ºÇϴµ¥, ¿©±â¿¡¼ ¼Ò¼öÁ¡ µÚ¿¡ µû¸£´Â ¼ýÀÚÀÇ °³¼ö´Â ´ç½ÅÀÌ ÁöÁ¤ÇÑ »ó¼¼ÁöÁ¤¿¡ ÀÇÇØ Á¶ÀýµÈ´Ù.
'%e'
º¯È¯ÀÚ´Â ±× Àμö¸¦ Áö¼ö Ç¥±â·Î ÇÁ¸°Æ®Çϸç, [-]d.ddde[+|-]dd ÇüÅ·ΠÃâ·ÂÀ» »ý¼ºÇÑ´Ù. ¶ÇÇÑ, ¼Ò¼ö Á¡ µÚ¿¡ µû¸£´Â ¼ýÀÚÀÇ °¹¼ö´Â »ó¼¼ÁöÁ¤¿¡ ÀÇÇØ Á¶ÀýµÈ´Ù.Áö¼ö´Â ÃÖ¼ÒÇÑ µÎ°³ÀÇ ¼ýÀÚ¸¦ ´ã°Ô µÈ´Ù. '%E' º¯È¯ÀÚ´Â À¯»çÇÏÁö¸¸ Áö¼ö¸¦ 'e' ´ë½Å¿¡ ¹®ÀÚ 'E'·Î Ç¥±âÇÑ´Ù´Â Á¡¸¸ ´Ù¸£´Ù.
'%g'¿Í '%G'
º¯È¯ÀÚ´Â ¸¸¾à Áö¼ö°¡ -4ÀÌÇÏÀ̰ųª »ó¼¼ÁöÁ¤º¸´Ù °°°Å³ª Å©¸é Àμö¸¦ '%e'³ª '%E'(°¢°¢) ÇüÅ·ΠÇÁ¸°Æ®ÇÑ´Ù;±×·¸Áö ¾ÊÀ» °æ¿ì¿¡´Â À̵éÀº '%f' ÇüÅ·Π»ç¿ëÇÑ´Ù.µÚ¿¡ ºÙ´Â ¿µµéÀº °á°úÄ¡ÀÇ ¼Ò¼öºÎ ºÐ¿¡¼ Á¦°ÅµÇ¸ç,¼Ò¼öÁ¡ ¹®ÀÚ´Â ¼ýÀÚ°¡ µÚµû¸¦ ¶§¸¸ ³ªÅ¸³´Ù.
´ÙÀ½ Ç÷¡±×µéÀº ±× ÇàÀ§¸¦ º¯°æÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù:
'-'
Çʵ忡¼ °á°ú¸¦ ¿ÞÆí¿¡ Á¤·ÄÇÑ´Ù.Á¤»óÀûÀ¸·Î´Â °á°úÄ¡¸¦ ¿À¸¥Æí¿¡ Á¤·ÄÇÑ´Ù.
'+'
°á°úÄ¡¿¡¼ Ç×»ó Ç÷¯½º³ª ¸¶À̳ʽº¸¦ Æ÷ÇÔÇÑ´Ù.
` '
¸¸¾à °á°úÄ¡°¡ Ç÷¯½º³ª ¸¶À̳ʽº ºÎÈ£·Î ½ÃÀÛµÇÁö ¾Ê´Â´Ù¸é,±× ´ë½Å¿¡ °ø¹éÀ¸·Î ÈĹ̸¦ ä¿î´Ù. '+' Ç÷¡±×´Â °á°úÄ¡°¡ ºÎÈ£¸¦ Æ÷ÇÔÇϵµ·Ï º¸ÁõÇϱ⶧¹®¿¡ ¸¸¾à ´ç½ÅÀÌ µÎ ºÎÈ£¸¦ ÇÔ²² °ø±ÞÇϸé ÀÌ ÇÃ
·¡±×´Â ¹«½ÃµÈ´Ù.
'#'
´Â °á°úÄ¡°¡ ºñ·Ï µÚµû¸£´Â ¼ýÀÚ¸¦ °®Áö ¾Ê´õ¶óµµ Ç×»ó ¼Ò¼öÁ¡À» Æ÷ÇÔÇϵµ·Ï ÁöÁ¤ÇÑ´Ù.'%g'¿Í '%G'
º¯È¯ÀÚ¿¡ ´ëÇØ¼ À̰ÍÀº ¼Ò¼öÁ¡ µÚÀÇ ¿µÀ» ´Ù¸¥ °æ¿ì¿¡´Â Á¦°ÅµÇ´Â ÁöÁ¡ÀÇ ¿ÞÆí¿¡ µÎµµ·Ï °Á¦ÇÑ´Ù.
'0'
°ø¹é´ë½Å¿¡ 0À¸·Î Çʵ带 ä¿î´Ù;0Àº ¾î¶² ºÎÈ£ ´ÙÀ½¿¡ ³õÀδÙ.¸¸¾à '-' Ç÷¡±×°¡ ÁöÁ¤µÇ¸é ÀÌ Ç÷¡ ±×´Â ¹«½ÃµÈ´Ù.
»ó¼¼ÁöÁ¤Àº '%f','%e'¿Í '%E' º¯È¯ÀÚ¿¡¼ ¼Ò¼öÁ¡´ÙÀ½¿¡ ¸î°³ÀÇ ¼ýÀÚ°¡ ¿Ã °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù.ÀÌ µé º¯È¯ÀÚ¿¡ ´ëÇØ¼ ³»Á¤ »ó¼¼ÁöÁ¤Àº 6ÀÌ´Ù.¸¸¾à »ó¼¼ ÁöÁ¤ÀÌ ¸í½ÃÀûÀ¸·Î 0À̸é,À̰ÍÀº ¼Ò¼öÁ¡ ¹®ÀÚ ¸¦ ¿ÏÀüÈ÷ ¹èÁ¦ÇÑ´Ù.'%g'¿Í '%G' º¯È¯ÀÚ¿¡ ´ëÇØ¼ »ó¼¼ÁöÁ¤Àº ¸î°³ÀÇ À¯È¿¼ýÀÚ¸¦ ÇÁ¸°Æ®ÇÒ °ÍÀΰ¡ ¸¦ ÁöÁ¤ÇÑ´Ù. À¯È¿¼ýÀÚ´Â ¼Ò¼öÁ¡ ¾ÕÀÇ Ã³À½ ¼ýÀÚ¿Í ¼Ò¼öÁ¡ ´ÙÀ½ÀÇ ¸ðµç ¼ýÀÚ´Ù.¸¸¾à '%g'³ª '%G'¿¡ ´ëÇØ »ó¼¼ÁöÁ¤ÀÌ 0À̵簡 ÁöÁ¤µÇÁö ¾ÊÀ¸¸é,»ó¼¼ÁöÁ¤Àº 1ÀÇ °ªÀ» °®´Â °ÍÀ¸·Î °£ÁֵȴÙ.¸¸¾à ÇÁ¸°Æ®µÉ °ªÀÌ ¼ýÀÚÀÇ ÁöÁ¤µÈ °¹¼ö¿¡¼ »ó¼¼ÇÏ°Ô ³ªÅ¸³¾ ¼ö ¾ø´Â °æ¿ì¶ó¸é, °ªÀº Àû´çÇÑ ±Ù»ç°ªÀ¸·Î 󸮵ȴÙ.
ÇüÅ º¯°æÀÚ°¡ ¾øÀ¸¸é,ºÎµ¿¼Ò¼öÁ¡ º¯È¯ÀÚ´Â double ÇüÅÂÀÇ Àμö¸¦ »ç¿ëÇÑ´Ù.(³»Á¤ Àμö 󸮿¡ ÀÇÇØ
¾î¶°ÇÑ float ÀμöÀÌµç °£¿¡ ÀÚµ¿ÀûÀ¸·Î double·Îº¯È¯µÈ´Ù.) ´ÙÀ½ ÇüÅ º¯°æÀÚ°¡ Áö¿øµÈ´Ù.
'L'
´ë¹®ÀÚ 'L'Àº Àμö°¡ long doubleÀÏ °ÍÀ» ÁöÁ¤ÇÑ´Ù.
´Ù¾çÇÑ ºÎµ¿¼Ò¼öÁ¡ º¯È¯ÀÚ¸¦ »ç¿ëÇÏ¿© ¾î¶² ¼öÄ¡µéÀ» ÇÁ¸°Æ®ÇÒ ¼ö Àִ°¡¸¦ º¸¿©ÁÖ´Â ¸î°³ÀÇ ¿¹µé ÀÌ ÀÖ´Ù.ÀÌ ¼öÄ¡µé ¸ðµÎ´Â ´ÙÀ½ÀÇ ÅÛÇø®Æ® ¹®ÀÚ¿À» »ç¿ëÇÏ¿© ÇÁ¸°Æ®µÇ¾ú´Ù:
"|%12.4f|%12.4e|%12.4g|\n"
Ãâ·ÂÀº ÀÌ·¸´Ù:
| 0.0000
1.0000 -1.0000 100.0000 1000.0000 10000.0000 12345.0000 100000.0000 123456.0000 |
0.0000e+00
1.0000e+00 -1.0000e+00 1.0000e+02 1.0000e+03 1.0000e+04 1.2345e+04 1.0000e+05 1.2346e+05 |
0
1 -1 100 1000 1e+04 1.234e+04 1e+05 1.234e+05 |
'%g' º¯È¯ÀÚ°¡ µÚµû¸£´Â 0À» ¶³¾î¶ß¸®´Â ¹ý¿¡ À¯ÀÇÇ϶ó.
7.9.6 ¿©Å¸ÀÇ Ãâ·Â º¯È¯ÀÚ
ÀÌ Àý¿¡¼´Â printf¿¡ ´ëÇÑ °¢Á¾ÀÇ º¯È¯ÀÚ¿¡ ´ëÇØ ±â¼úÇÑ´Ù.
'%c'
º¯È¯ÀÚ´Â ´ÜÀÏÇÑ ¹®ÀÚ¸¦ ÇÁ¸°Æ®ÇÑ´Ù. int Àμö´Â óÀ½¿¡ unsigned char·Î º¯È¯µÈ´Ù.'-' Ç÷¡±×´Â ÇÊ µå³»¿¡¼ÀÇ ¿ÞÆí Á¤·ÄÀ» ÁöÁ¤Çϱâ À§ÇØ »ç¿ëµÉ ¼ö ÀÖÁö¸¸,´Ù¸¥ Ç÷¡±×´Â Á¤ÀǵÇÁö ¾ÊÀ¸¸ç,»ó¼¼ÁöÁ¤ÀÌ ³ª ÇüÅ º¯°æÀÚµµ ÁÖ¾îÁú ¼ö ¾ø´Ù.¿¹¸¦ µé¾î:
printf ("%c%c%c%c%c", 'h', 'e', 'l', 'l', 'o');
´Â 'hello'¸¦ ÇÁ¸°Æ®ÇÑ´Ù.
'%s'
º¯È¯ÀÚ´Â ¹®ÀÚ¿À» ÇÁ¸°Æ®ÇÑ´Ù.»óÀÀÇÏ´Â Àμö´Â char * (¶Ç´Â const char *) ÇüÅ¿©¾ß ÇÑ´Ù. »ó¼¼Áö Á¤Àº ±â·ÏÇÒ ¹®ÀÚÀÇ ÃÖ´ë °³¼ö¸¦ ³ªÅ¸³»±â À§ÇÏ¿© ÁöÁ¤µÉ ¼ö ÀÖ´Ù;±×·¸Áö ¾ÊÀ» °æ¿ì¿¡´Â ³Î¹®ÀÚ¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀ» µ¿¾ÈÀÇ ¸ðµç ¹®ÀÚ°¡ Ãâ·Â ½ºÆ®¸²¿¡ ±â·ÏµÈ´Ù. '-' Ç÷¡±×´Â Çʵ峻¿¡¼ÀÇ ¿ÞÆí Á¤·Ä À» ÁöÁ¤Çϱâ À§ÇØ »ç¿ëµÉ ¼ö ÀÖÁö¸¸,´Ù¸¥ Ç÷¡±×³ª ÇüÅ º¯°æÀÚ´Â ÀÌ º¯È¯ÀÚ¿¡ ´ëÇØ¼ ÁÖ¾îÁú ¼ö ¾ø ´Ù.¿¹¸¦ µé¾î:
printf ("%3s%-6s", "no", "where");
´Â ' nowhere '¸¦ ÇÁ¸°Æ®ÇÑ´Ù.
¸¸¾à ´ç½ÅÀÌ ¿ì¿¬È÷ '%s' º¯È¯ÀÚ¿¡ ´ëÇÑ Àμö·Î¼ ³Î Æ÷ÀÎÅ͸¦ Àü´ÞÇÏ°Ô µÇ¸é,GNU ¶óÀ̺귯¸®´Â ±×°ÍÀ»'(null)'·Î ÇÁ¸°Æ®ÇÑ´Ù.À̰ÍÀº ½ÇÆÐº¸´Ù´Â ³´´Ù°í »ý°¢ÇÒ ¼ö ÀÖ´Ù.±×·¯³ª ÀǵµÀûÀ¸·Î ³Î Àμö¸¦ Àü´ÞÇÏ´Â °ÍÀº ÁÁÀº ½À°üÀÌ ¾Æ´Ï´Ù.
'%m'
º¯È¯ÀÚ´Â errno³»ÀÇ ¿¡·¯Äڵ忡 ÇØ´çÇÏ´Â ¹®ÀÚ¿À» ÇÁ¸°Æ®ÇÑ´Ù.2.3 [¿¡·¯ ¸Þ¼¼Áö],17ÂÊ ÂüÁ¶.
Áï:
fprintf (stderr, " `%s'À» ¿ ¼ö ¾ø½¿.: %m\n",filename); Àº
fprintf (stderr, " `%s'À» ¿ ¼ö ¾ø½¿.: %s\n",filename, strerror (errno)); °ú °°´Ù.
'%m' º¯È¯ÀÚ´Â GNU C ¶óÀ̺귯¸® È®ÀåÀÌ´Ù.
'%p'
º¯È¯ÀÚ´Â Æ÷ÀÎÅÍ °ªÀ» ÇÁ¸°Æ®ÇÑ´Ù. »óÀÀÇÏ´Â Àμö´Â void * ÇüÅ¿©¾ß ÇÑ´Ù. »ç½Ç»ó, ´ç½ÅÀº ¾î¶°ÇÑ ÇüÅÂÀÇ Æ÷ÀÎÅ͵µ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
GNU C üÁ¦¿¡¼´Â,³ÎÀÌ ¾Æ´Ñ Æ÷ÀÎÅ͵éÀº ¸¶Ä¡ '%#x' º¯È¯ÀÚ°¡ »ç¿ëµÈ °Íó·³ ¹«ºÎÈ£ Á¤¼ö·Î ÇÁ¸°
Æ®µÈ´Ù.³Î Æ÷ÀÎÅ͵éÀº '(nil)'·Î ÇÁ¸°Æ®µÈ´Ù. (Æ÷ÀÎÅ͵éÀº üÁ¦¸¶´Ù ´Ù¸£°Ô ÇÁ¸°Æ®µÉ °ÍÀÌ´Ù.)
¿¹¸¦ µé¾î:
printf ( "%p", "¿¬½À" );
Àº 16Áø¼ö°¡ µÚµû¸£´Â '0x'¸¦ ÇÁ¸°Æ®ÇÑ´Ù_¹®ÀÚ¿ »ó¼ö "¿¬½À"ÀÇ ÁÖ¼Ò.±×°ÍÀº '¿¬½À'À̶õ ´Ü¾î¸¦ ÇÁ¸° Æ®ÇÏ´Â °ÍÀÌ ¾Æ´Ï´Ù.
´ç½ÅÀº '%p' º¯È¯ÀÚ¿¡¼ ¿ÞÆí Á¤·ÄÀ» ÁöÁ¤Çϱâ À§ÇÏ¿© '-' Ç÷¡±×¸¦ °ø±ÞÇÒ ¼ö´Â ÀÖÁö¸¸, ´Ù¸¥ Çà ·¡±×,»ó¼¼ÁöÁ¤,¶Ç´Â ÇüÅ º¯°æÀÚ¸¦ Á¤ÀÇÇÒ ¼ö ¾ø´Ù.
'%n'
º¯È¯ÀÚ´Â ¿©Å¸ÀÇ Ãâ·Â º¯È¯ÀÚ¿Í´Â ´Ù¸£´Ù. À̰ÍÀº Àμö¸¦ »ç¿ëÇϴµ¥,±× Àμö´Â int¿¡ ´ëÇÑ Æ÷ÀÎÆ® ¿©¾ß¸¸ ÇÑ´Ù.±×·¯³ª ÀÌ º¯È¯ÀÚ´Â ¾î¶² °ÍÀ» ÇÁ¸°Æ®ÇÏ´Â ´ë½Å¿¡ ±× À§Ä¡¿¡¼ È£ÃâµÇ¾úÀ» ¶§ ÇÁ¸°Æ®µÇ ´Â ¹®ÀÚÀÇ °¹¼ö¸¦ ÀúÀåÇÑ´Ù.'h'¿Í 'l' ÇüÅ º¯°æÀÚ´Â Àμö°¡ int * ´ë½Å¿¡ short int *À̵çÁö long int * Àΰ¡¸¦ ÁöÁ¤Çϵµ·Ï Çã¿ëµÇ¾î ÀÖÀ¸¸ç,Ç÷¡±×,ÇÊµå Æø,»ó¼¼ÁöÁ¤Àº Çã¿ëµÇÁö ¾Ê´Â´Ù.
¿¹¸¦ µé¸é,
int nchar;
printf ("%d %s%n\n", 3, "bears", &nchar);
´Â
3 bears
¸¦ ÇÁ¸°Æ®Çϰí,'3 bears'´Â 7¹®ÀÚÀ̱⠶§¹®¿¡ nchar¿¡ 7À» ³Ö´Â´Ù.
'%%'
º¯È¯ÀÚ´Â ¸®ÅÍ·² '%' ¹®ÀÚ¸¦ ÇÁ¸°Æ®ÇÑ´Ù.
ÀÌ º¯È¯ÀÚ´Â Àμö¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸ç,Ç÷¡±×,ÇÊµå Æø, »ó¼¼ÁöÁ¤,¶Ç´Â ÇüÅ º¯°æÀÚ°¡ Çã¿ëµÇÁö ¾Ê´Â´Ù.
7.9.7 Çü½ÄÈµÈ Ãâ·Â ÇÔ¼ö
ÀÌ Àý¿¡¼´Â printf¿Í °ü·ÃÇÔ¼öµéÀ» È£ÃâÇÏ´Â ¹æ¹ýÀ» ±â¼úÇÑ´Ù.ÀÌ ÇÔ¼öµéÀÇ ¿øÇüÀº Çì´õÆÄÀÏ 'stdio.h'¿¡ ÀÖ´Ù.ÀÌ ÇÔ¼öµéÀº ÀμöÀÇ °¹¼ö¸¦ °¡º¯ÀûÀ¸·Î °®°íÀֱ⠶§¹®¿¡,´ç½ÅÀº ±×°ÍµéÀ» »ç¿ëÇϱâ Àü¿¡ ¿øÇüÀ» ¼±¾ðÇØ¾ß ÇÑ´Ù.¹°·Ð ´ç½ÅÀÌ ¿Ã¹Ù¸¥ ¿øÇüÀ» °®°Ô µÇ´Â È®½ÇÇÏ°í ¼Õ½¬¿î ¹æ¹ýÀº °ð¹Ù·Î 'stdio.h'¸¦ Æ÷ÇÔÇÏ´Â °ÍÀÌ´Ù.
ÇÔ¼ö int printf (const char *template, . . .)
printf ÇÔ¼ö´Â ÅÛÇø®Æ® ¹®ÀÚ¿ templateÀÇ ÅëÁ¦ÇÏ¿¡ ¼±ÅÃÀû ÀμöµéÀ» ½ºÆ®¸² stdout·Î ÇÁ¸°Æ®ÇÑ´Ù.
ÀÌ ÇÔ¼ö´Â ÇÁ¸°Æ®µÇ´Â ¹®ÀÚµéÀÇ °¹¼ö¸¦ ¹ÝȯÇϰųª ¸¸¾à Ãâ·Â¿¡·¯°¡ ÀÖÀ¸¸é À½¼ö°ªÀ» ¹ÝȯÇÑ´Ù.
ÇÔ¼ö int fprintf(FILE *stream, const char *template, . . .)
ÀÌ ÇÔ¼ö´Â print ÇÔ¼ö¿Í ²À °°À¸³ª,Ãâ·ÂÀÌ stdout ´ë½Å¿¡ ½ºÆ®¸² stream¿¡ ¾²¿©Áø´Ù´Â Á¡¸¸ ´Ù¸£´Ù.
<¿ªÀÚÁÖ> ½ºÆ®¸² streamÀÌ ¾Æ´Ï°í ÆÄÀÏ streamÀÌ ¾Æ´Ñ°¡?
** stream stream ---> FILE stream ????
ÇÔ¼ö int sprintf (char *s, const char *template, . . .)
À̰ÍÀº printf¿Í °°À¸³ª,Ãâ·ÂÀÌ ½ºÆ®¸²¿¡ ¾²¿©Áö´Â ´ë½Å¿¡ ¹®ÀÚ ¹è¿ s¿¡ ÀúÀåµÈ´Ù´Â Á¡¸¸ ´Ù¸£´Ù.³Î ¹®ÀÚ´Â ¹®ÀÚ¿ÀÇ ³¡À» Ç¥½ÃÇϱâ À§ÇØ ¾²¿© Áø´Ù.
sprintf ÇÔ¼ö´Â ¹è¿ s¿¡ ÀúÀåµÈ ¹®ÀÚÀÇ °¹¼ö¸¦ ¹ÝȯÇÏÁö¸¸ Á¾·á ³Î¹®ÀÚ´Â Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ÀÌ ÇÔ ¼öÀÇ ÇàÀ§´Â ¸¸¾à¿¡ º¹»ç°¡ ÁßøµÇ´Â ´ë»ó¹°»çÀÌ¿¡¼ ÀϾٸé__¿¹¸¦ µé¾î,¸¸¾à¿¡ s°¡ '%s' º¯È¯ ÀÚÀÇ ÅëÁ¦ÇÏ¿¡¼ ÇÁ¸°Æ®µÇ´Â Àμö·Î¼µµ ÁÖ¾îÁø´Ù¸é__Á¤ÀǵÇÁö ¾Ê´Â´Ù.5.4 [º¹»ç¿Í ¿¬°á],46ÂÊ ÂüÁ¶.
°æ°í: sprintf ÇÔ¼ö´Â À§ÇèÇÒ ¼ö°¡ ÀÖ´Ù, ¿Ö³ÄÇϸé±×°ÍÀº ÀáÀçÀûÀ¸·Î ¹®ÀÚ¿ sÀÇ ÇÒ´çÅ©±â¿¡ ÀûÇÕ °¡´ÉÇÑ °Íº¸´Ù ´õ¸¹Àº ¼öÀÇ ¹®ÀÚ¸¦ Ãâ·ÂÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®ÀÌ´Ù.º¯È¯ÀÚ ÁöÁ¤¿¡¼ ÁÖ¾îÁø ÇÊµåÆø Àº ÃÖ¼Ò°ªÀÏ »ÓÀÓÀ» ±â¾ïÇ϶ó.
ÀÌ ¹®Á¦¸¦ ÇÇÇϱâ À§ÇÏ¿©,´ç½ÅÀº ´ÙÀ½¿¡ ±â¼úµÇ´Â snprintf³ª asprintf¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÇÔ¼ö int snprintf (char *s, size_t size, const char *template, . . .)
snprintf ÇÔ¼ö´Â sprintf ÇÔ¼ö¿Í À¯»çÇÏÁö¸¸, size Àμö°¡ ¸¸µé¾î³¾ ¹®ÀÚµéÀÇ ÃÖ´ë°¹¼ö¸¦ ÁöÁ¤ÇÑ´Ù´Â Á¡¸¸ ´Ù¸£´Ù.µû¶óºÙ´Â ³Î¹®ÀÚ´Â ÀÌ ÇѰèÄ¡¿¡ Æ÷ÇÔµÇ¾î °è»êµÇ¹Ç·Î,´ç½ÅÀº ¹®ÀÚ¿ s¿¡ ´ëÇØ ÃÖ¼ÒÇÑ size ¹®ÀÚ¸¦ ÇÒ´çÇÏ¿©¾ß¸¸ ÇÑ´Ù.
¹Ýȯ°ªÀº ÀúÀåµÈ ¹®ÀÚÀÇ °¹¼öÀε¥,Á¾·á ³ÎÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ¸¸¾à ÀÌ °ªÀÌ size-1 À̶ó¸é,s¿¡´Â ¸ð µç Ãâ·ÂÀ» À§ÇÑ °ø°£ÀÌ ºÒÃæºÐÇÑ °ÍÀÌ´Ù. ´ç½ÅÀº ´õ Å« Ãâ·Â ¹®ÀÚ¿À» °®°í¼ ´Ù½Ã ÇØ¾ß ÇÑ´Ù. ÀÌ·¸ °Ô ÇÏ´Â ¿¹¸¦ µé¾î º¸ÀÚ:
/* ¸íĪÀÌ nameÀÌ°í °ªÀÌ valueÀÎ º¯¼öÀÇ °ªÀ» ±â¼úÇÏ´Â ¸Þ¼¼Áö ¸¸µé±â. */
char * make_message (char *name, char *value)
{
/* Á¤È®È÷ 100 charÀÇ °ø°£¸¸ ÇÊ¿äÈ÷µð°í °¡Á¤.*/
int size = 100;
char *buffer = (char *) xmalloc (size);
while (1)
{
/* ÇÒ´çµÈ °ø°£¿¡ ÇÁ¸°Æ® ½Ãµµ. */
int nchars = snprintf (buffer, size, "value of %s is %s", name, value);
/* ÀÛµ¿ÇÏ¸é ¹®ÀÚ¿ ¹ÝȯÇÔ. */
if (nchars < size)
return buffer;
/* ±×·¸Áö ¾ÊÀ» °æ¿ì 2¹èÀÇ °ø°£À¸·Î ´Ù½Ã ½Ãµµ.*/
size *= 2;
buffer = (char *) xrealloc (size, buffer);
}
}
»ç½Ç»ó,´ÙÀ½¿¡ ÀÖ´Â asprintf¸¦ ¹Ù·Î »ç¿ëÇÏ´Â ÆíÀÌ ´õ ½¬¿ï ¶§°¡ ¸¹´Ù.
7.9.8 µ¿ÀûÀ¸·Î ÇÒ´çÇÏ´Â Çü½ÄÈµÈ Ãâ·Â
ÀÌ Àý¿¡ ÀÖ´Â ÇÔ¼öµéÀº Ãâ·Â¹°À» Çü½ÄÈ ½Ã۰í, ±× °á°ú¸¦ µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¸Þ¸ð¸®¿¡ ³Ö´Â ÀÏÀ» ÇÑ´Ù.
ÇÔ¼ö : int asprintf (char **ptr, const char *template, . . .)
ÀÌ ÇÔ¼ö´Â sprintfÇÔ¼ö°¡ ¹Ì¸® ÇÒ´çµÈ ¹öÆÛ¿¡ outputÀ» ÀúÀåÇÏ´Â ´ë½Å¿¡ µ¿ÀûÀ¸·Î ÇÒ´çµÈ °÷¿¡ ÀúÀå ÇÑ´Ù´Â Á¡À» Á¦¿ÜÇϰí´Â sprintfÇÔ¼ö°ú À¯»çÇÏ´Ù.( mallocÀ» »ç¿ëÇÑ´Ù; 3.3Àý [Unconstrained Allocation] 22ÆäÀÌÁö ÂüÁ¶) ¿©±â¼ ptr Àμö´Â char * objectÀÇ ÁÖ¼Ò°¡ µÇ¾îÁö°í, asprintf´Â ±× À§Ä¡ ¿¡ »õ·Ó°Ô ÇÒ´çµÈ ¹®ÀÚ¿À» °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ÀúÀåÇÑ´Ù.
¿©±â¿¡ snprintf¿Í °°Àº °á°ú¸¦ ¾ò±âÀ§ÇØ asprintf¸¦ »ç¿ëÇÏ´Â ¹ýÀ» º¸¿©ÁÖ°í ÀÖ´Ù, ´õ ½¬¿î ¹æ¹ýÀÌ ´Ù.
/* º¯¼öÀÇ °ª, Áï, À̸§Àº ¹¹°í, °ªÀº ¹¹¶ó´Â ½ÄÀ¸·Î ¾Ë¸®±â À§ÇØ ±¸Á¶ÈµÈ Ãâ·Â¹®ÀÌ ÇÊ¿äÇÏ´Ù. */
char *
make_message (char *name, char *value)
{
char *result;
asprintf (&result, "value of %s is %s", name,
value);
return result;
}
ÇÔ¼ö : int obstack__printf (struct obstack *obstack, const char *template, . . .)
ÀÌ ÇÔ¼ö´Â °ø°£À» ÇÒ´çÇϱâ À§Çؼ obstackÀ» »ç¿ëÇÏ´Â °ÍÀ» Á¦¿ÜÇϸé asprintf ÇÔ¼ö¿Í À¯»çÇÏ´Ù. 3.4Àý [Obstacks] 28 ÆäÀÌÁö¸¦ ÂüÁ¶. ÇöÀç objectÀÇ ³¡¿¡ ¾º¿©ÀÖ´Â ¹®ÀÚµé, ±×µéÀ» ¾ò±âÀ§Çؼ, ´ç½Å Àº obstack_finish·Î object¸¦ ³¡³»¾ß¸¸ÇÑ´Ù. ( 3.4.6Àý [Growing Objects], 31ÆäÀÌÁö ÂüÁ¶)
7.9.9 ´Ù¾çÇÑ ÀμöµéÀ» Ãâ·ÂÇÏ´Â ÇÔ¼öµé
vprintf ÇÔ¼ö¿Í ±× À¯»çÇÑ ÇÔ¼öµéÀº printf ÇÔ¼ö¸¦ °¡Áö°í Çü½ÄÈµÈ Ãâ·ÂÀ» ÇÒ¼öÀÖµµ·Ï ³»ºÎÀûÀ¸·Î »ç¿ëµÇ´Â ´Ù¾çÇÑ Çü½ÄÀ» ´ç½Å ÀÚ½ÅÀÇ °ÍÀ¸·Î Á¤ÀÇÇÒ¼ö ÀÖµµ·Ï ÇØÁØ´Ù.
ÀÌ·± ÇÔ¼öµéÀ» Á¤ÀÇÇÏ´Â °¡Àå ÁÁÀº ¹æ¹ýÀº ¾ð¾î¸¦ »ç¿ëÇÏ¿© "printf ÇÔ¼ö¸¦ È£ÃâÇϰí, ù ¹øÂ° ´Ù¼¸ °³ ÈÄÀÇ Àμö¸ðµÎ¸¦ ´õÇÑ ÅÛÇø´À» ³Ñ°Ü¶ó" ¶ó°í ¸»ÇÏ´Â °ÍÀÌ´Ù. ±×·¯³ª C·Î´Â ÀÌ·¸°Ô ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø´Ù, ±×¸®°í Á¦°øµÇ´Â ¹æ¹ýÀº ¸Å¿ì »ç¿ëÇÏ±â ¾î·Æ´Ù. ±×¸®°í C¾ð¾î ¼öÁØ¿¡¼´Â ´ç½ÅÀÇ ÇÔ¼ö ¿¡ ¸¹Àº ÀμöµéÀÌ ¾î¶»°Ô ¹Þ¾Æµé¿©Áø°ÇÁö ¾Ë¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø´Ù.
±× ¹æ¹ýÀÌ ºÒ°¡´ÉÇ߱⠶§¹®¿¡, ¿ì¸®´Â "ù¹øÂ° ´Ù¼¸ÈÄÀÇ ¸ðµç Àμöµé"µµ Ç¥ÇöÇÏ¿© va_list·Î ³Ñ±âµµ ·Ï ÇÑ vprintf ½Ã¸®ÁîÀÎ ¼±ÅÃÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
vprintf³ª ÀÌÀý¿¡µµ º¸¿©ÁÖ°í ÀÖ´Â ´Ù¸¥ ÇÔ¼öµéÀº È£ÃâÇϱâ Àü¿¡ ´ç½ÅÀº ¸ÕÀú va_start¸¦ È£ÃâÇÏ¿© ´Ù¾çÇÑ Àμöµé·Î Æ÷ÀÎÅ͸¦ ÃʱâÈÇØÁà¾ß¸¸ ÇÑ´Ù.( A.2Àý Variadic Functions] 382ÆäÀÌÁö ÂüÁ¶) ±×¸® °í³ª¼ ´ç½ÅÀº ´ç½ÅÀÌ ´Ù·ç±â ¿øÇÏ´Â ÀμöµéÀ» °¡Á®¿À±âÀ§ÇØ va_arg¸¦ È£ÃâÇÒ¼ö ÀÖ´Ù.
ÀÏ´Ü ´ç½ÅÀÇ va_list Æ÷ÀÎÅͰ¡ ´ç½ÅÀÌ ¼±ÅÃÇÑ Àμö¸¦ °¡¸®Å°°í ÀÖÀ¸¸é ´ç½ÅÀº vprintf¸¦ È£ÃâÇÒ ÁØ ºñ°¡ µÇ¾îÀÖ´Â °ÍÀÌ´Ù. ±× Àμö¿Í ¸ðµç ºÎ¼ÓµÈ ÀμöµéÀº ±¸ºÐµÇ°Ô Á¤ÇÏ¿©Áø template¿Í ÇÔ²² vprintf¿¡ ÀÇÇØ »ç¿ëµÇ¾îÁø ´ç½ÅÀÇ ÇÔ¼ö¿¡ ³Ñ°ÜÁø´Ù.
¾î¶² ´Ù¸¥ ½Ã½ºÅÛ¿¡¼´Â, va_list Æ÷ÀÎÅÍ´Â vprintf¸¦ È£ÃâÇÑ ÈÄ¿¡ À¯¿ëÇÏ°Ô µÇ¾îÁö´Âµ¥, ´ç½ÅÀº vprintf¸¦ È£ÃâÇÑ ÈÄ¿¡ va_arg¸¦ »ç¿ëÇÒ ¼ö´Â ¾ø´Ù. ´ë½Å¿¡, ´ç½ÅÀº ¼ºñ½º·ÎºÎÅÍ Æ÷ÀÎÅ͸¦ ¾ø¾Ö±â À§ÇÏ¿© va_end¸¦ È£ÃâÇØ¾ßÇÑ´Ù. ±×·¡¾ß¸¸ ´ç½ÅÀÌ ´Ù¸¥ Æ÷ÀÎÅÍ º¯¼ö¿¡ va_start¸¦ È£ÃâÇϰí, ±× Æ÷ÀÎ Å͸¦ ÅëÇØ Àμö ÃßÃâÀ» ½ÃÀÛÇϴ°͵éÀ» ¾ÈÀüÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù. vprintf¸¦ È£ÃâÇÏ´Â °ÍÀº ´ç½ÅÀÇ ÇÔ¼ö ÀÇ Àμö ¸®½ºÆ®¸¦ ÆÄ±«ÇÏÁö ¾Ê´Â´Ù, ´ÜÁö, ±×°Í¿¡°Ô ³Ñ°ÜÁø Æ÷ÀÎÅÍÀÌ´Ù.
GNU C¿¡¼´Â ±×¿Í °°Àº Á¦ÇÑÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù. ´ç½ÅÀº vprintf¿¡ ±×°ÍÀ» ³Ñ°ÜÁØ ÀÌÈÄ¿¡µµ va_list Æ÷ÀÎÅÍ·Î ºÎÅÍ ÀμöµéÀ» ÃßÃâÇÏ´Â °ÍÀ» ¾ÈÀüÇÏ°Ô °è¼ÓÇÒ¼ö ÀÖ°í va_end is a no-op. ( Âü°í, ±×·¸Áö¸¸, va_argÈ£Ãâ ºÎ¼Ó ÀμöµéÀº ¹Ì¸® vprintf¸¦ »ç¿ëÇÏ¿© °°Àº ÀμöµéÀ» ÃßÃâÇÒ °ÍÀÌ´Ù. )
ÀÌ ÇÔ¼öµéÀ» À§ÇÑ ÇÁ·ÎÅäŸÀÔÀº 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : int vprintf (const char *template, va_list ap)
ÀÌ ÇÔ¼ö´Â Á÷Á¢ÀûÀ¸·Î Àμö·Î½á ÇѺ¯¼öÀÇ ¼ö¸¦ ÃëÇÏ´Â ´ë½Å¿¡ Àμö ¸®½ºÆ® Æ÷ÀÎÅÍ ap¸¦ ÃëÇÑ´Ù´Â Á¡À» Á¦¿ÜÇϰí´Â printf¿Í À¯»çÇÏ´Ù.
ÇÔ¼ö : int vfprintf (FILE *stream, const char *template, va_list ap)
ÀÌ ÇÔ¼ö´Â vprintf·Î Á÷Á¢ÀûÀ¸·Î Á¤ÇØÁø º¯¼ö Àμö ¸®½ºÆ®¸¦ »ç¿ëÇÑ fprintf¿Í µ¿µîÇÏ´Ù.
ÇÔ¼ö : int vsprintf (char *s, const char *template, va_list ap)
ÀÌ ÇÔ¼ö´Â º¯¼ö Àμö¸®½ºÆ®¸¦ Àμö·Î »ç¿ëÇÑ sprintf¿Í µ¿µîÇÏ´Ù.
ÇÔ¼ö : int vsnprintf (char *s, size_t size, const char *template, va_list ap)
ÀÌ ÇÔ¼ö´Â Á÷Á¢ÀûÀ¸·Î ¼±Á¤µÈ º¯¼ö Àμö¸®½ºÆ®¸¦ »ç¿ëÇÑ snprintf ÇÔ¼ö¿Í µ¿ÀÏÇÏ´Ù.
ÇÔ¼ö : int vasprintf (char **ptr, const char *template, va_list ap)
vasprintfÇÔ¼ö´Â Á÷Á¢ÀûÀ¸·Î ¼±Á¤µÈ º¯¼ö Àμö¸®½ºÆ®¸¦ »ç¿ëÇÑ asprintf¿Í µ¿µîÇÏ´Ù.
ÇÔ¼ö : int obstack__vprintf (struct obstack *obstack, const char *template, va_list ap)
obstack_vprintf ÇÔ¼ö´Â vprintf·Î Á÷Á¢ÀûÀ¸·Î Á¤ÇØÁø º¯¼öÀμö ¸®½ºÆ®¸¦ »ç¿ëÇÏ´Â obstack_printf¿Í µ¿µîÇÏ´Ù.
¿©±â¿¡ vfprintf¸¦ ¾î¶»°Ô »ç¿ëÇß´ÂÁö¸¦ º¸¿©ÁÖ´Â ¿¹°¡ ÀÖ´Ù. À̰ÍÀº Ç¥ÁØ ½ºÆ®¸² sterr¿¡ ÇÁ·Î±×·¥ ÀÇ À̸§À» ÁöÀûÇÏ´Â Á¢µÎ»ç¿Í ÇÔ²², ¿¡·¯¸Þ¼¼Áö¸¦ ÇÁ¸°Æ®ÇÏ´Â ÇÔ¼öÀÌ´Ù.
(program_invocation_short_nameÀÇ ±â¼úÀ» À§Çؼ´Â 2.3Àý [Error Messages] 17ÆäÀÌÁö¸¦ ÂüÁ¶.
#include <stdio.h>
#include <stdarg.h>
void eprintf (char *template, ...)
{
va_list ap;
extern char *program_invocation_short_name;
fprintf (stderr, "%s: ", program_invocation_short_name);
va_start (ap, count);
vfprintf (stderr, template, ap);
va_end (ap);
}
´ç½ÅÀº ÀÌó·³ eprintf¸¦ È£ÃâÇÒ¼ö ÀÖ´Ù.
eprintf ("file '%s' does not exist\n", filename);
7.9.10 ÅÛÇø´ ½ºÆ®¸µ ÆÄ½Ì
´ç½ÅÀº ÁÖ¾îÁø ÅÛÇø´ ½ºÆ®¸µÀ¸·Î ¿¹»óµÇ´Â ÀμöµéÀÇ Å¸ÀÔ°ú, °³¼ö¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò±âÀ§ÇØ parse_printf_format ÇÔ¼ö¸¦ »ç¿ëÇÒ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â ÆÄ±«ÀÇ ¿øÀÎÀÌ µÉ ¼öµµ ÀÖ´Â, »ç¿ëÀÚÀÇ ÇÁ·Î±× ·¥À¸·ÎºÎÅÍ À¯¿ëÇÏÁö ¸øÇÑ Àμöµé·Î ÆÄ½ÌÇÏ´Â °ÍÀ» ÇÇÇϱâ À§ÇØ printf¿¡°Ô ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ´Â Áï°¢Àû ÇØ¼®À» Çã¿ëÇÑ´Ù.
ÀÌ Àý¿¡¼ ¼³¸íÇϰí ÀÖ´Â ¸ðµç ½Éº¼µéÀº Çì´õÈÀÏ 'printf.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : size_t parse__printf__format (const char *template, size_t n, int *argtypes)
ÀÌ ÇÔ¼ö´Â printf ½ºÆ®¸µ ÅÛÇø´¿¡ ÀÇÇØ ¿¹»óµÇ´Â ÀμöµéÀÇ °³¼ö¿Í ŸÀÔ¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù. ±× Á¤º¸´Â ¹è¿ argtypes¿¡ ÀúÀåµÇ¾î ÀÖ´Ù.; ÀÌ ¹è¿ÀÇ °¢ ¿ä¼ÒµéÀº ÇÑ °³ÀÇ Àμö¸¦ ¹¦»çÇϰí ÀÖ´Ù. ÀÌ Á¤º¸´Â ¹Ø¿¡ ¸®½ºÆ®µÈ ´Ù¾çÇÑ 'PA_'¸¶Å©·Î¸¦ »ç¿ëÇØ¼ ±âȣȵǾîÁ³´Ù.
n Àμö´Â ¹è¿ argtypes¾È¿¡ ¿ä¼ÒµéÀÇ °³¼ö¸¦ Á¤ÇÑ´Ù. À̰ÍÀº parse_printf_formatÀÌ ¾µ·Á°í(write) ½ÃµµÇÏ´Â ´ëºÎºÐÀÇ ¿ä¼ÒµéÀÌ´Ù. parse_printf_format´Â ÅÛÇø´¿¡ ÀÇÇØ ¿ä±¸µÇ´Â ÀμöµéÀÇ ÃѼö¸¦ ¸® ÅÏÇÑ´Ù. ¸¸ÀÏ ÀÌ ¼ýÀÚ°¡ n º¸´Ù Å©´Ù¸é ¿ÀÁ÷ ù ¹øÂ° ÀμöÀÎ nÀ» ¼³¸íÇÏ¿© Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù. ¸¸¾à ´ç½ÅÀÌ ¸¹Àº Àμöµé¿¡°Ô¼ º¸´Ù ´õ ¸¹Àº Á¤º¸¸¦ ¿øÇÑ´Ù¸é, ¹è¿À» Å©°Ô ÇÒ´çÇϰí parse_printf_format¸¦ ´Ù½Ã È£ÃâÇ϶ó.
ÀμöµéÀÇ Å¸ÀÔÀº ±âº» ŸÀÔÀ» Á¶ÇÕÇϰí, Ç÷¡±× ºñÆ®µéÀ» ¼öÁ¤ÇÏ¿© ±âÈ£È µÇ¾ú´Ù.
¸ÅÅ©·Î : int PA__FLAG__MASK
ÀÌ ¸¶Å©·Î´Â Ç÷¡±× ºñÆ®¸¦ ¿øÇÏ´Â ÇüÅ·Π¼öÁ¤Çϱâ À§ÇÑ ºñÆ®¸¶½ºÅ©ÀÌ´Ù. ´ç½ÅÀº Àμö¸¦ À§ÇØ Çà ·¡±× ºñÆ®¸¦ ÃßÃâÇϰųª (argtypes[i] & PA_FLAG_MASK) ±âº» ŸÀÔ Äڵ带 ÃßÃâÇϱâ À§ÇØ (argtypes[i] & ~PA_FLAG_MASK) ±× Ç¥ÇöÀ» ¾µ¼ö°¡ ÀÖ´Ù.
¿©±â¿¡ ±âº»Àû ŸÀÔÀ» ³ªÅ¸³»±â À§ÇÑ ½Éº¼ »ó¼öµéÀÌ ÀÖ´Ù; ±×µéÀº Á¤¼ö°ªµéÀ» À§ÇÑ Ç¥ÁØÀÌ´Ù.
PA_INT
±âº» ŸÀÔÀÎ int¸¦ ÁöÁ¤ÇÑ´Ù.
PA_CHAR
±âº» ŸÀÔÀÎ intÇüÀ» char·Î ij½ºÆ® ÇÔÀ» ÁöÁ¤ÇÑ´Ù.
PA_STRING
À̰ÍÀº ³Î Á¾·á ¹®ÀÚ¸¦ °®´Â ½ºÆ®¸µÀ» ÁöÁ¤ÇÏ´Â ±âº» ŸÀÔÀÎ char *¸¦ ÁöÁ¤ÇÑ´Ù.
PA_POINTER
À̰ÍÀº Çü¿¡ °ü°è¾ø´Â Æ÷ÀÎÅÍÇüÀÎ void *¸¦ ÁöÁ¤ÇÑ´Ù.
PA_FLOAT
À̰ÍÀº floatÇü ±âº» ÇüŸ¦ ÁöÁ¤ÇÑ´Ù.
PA_DOUBLE
À̰ÍÀº doubleÇü ±âº» ÇüŸ¦ ÁöÁ¤ÇÑ´Ù.
PA_LAST
´ç½ÅÀº PA_LAST·ÎºÎÅÍ offsets·Î ´ç½Å ÀÚ½ÅÀÇ ÇÁ·Î±×·¥¿¡ ºÎ°¡ÀûÀÎ ±âº»ÀûÀΠŸÀÔµéÀ» Á¤ÀÇÇÒ¼ö ÀÖ ´Ù. ¿¹¸¦ µé¸é, ¸¸ÀÏ ´ç½ÅÀÌ ±×µé ÀÚ½ÅÀÇ Æ¯º°ÈµÈ printf º¯È¯À¸·Î 'foo'¿Í 'bar'ÀÇ µ¥ÀÌÅÍ Å¸ÀÔµéÀº °®°í ÀÖ´Ù¸é, ´ç½ÅÀº ÀÌ Å¸ÀÔµéÀ» À§ÇØ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÒ¼ö ÀÖ´Ù:
#define PA_FOO PA_LAST
#define PA_BAR (PA_LAST + 1)
¿©±â¿£ ±âº»ÀûÀΠŸÀÔµéÀ» ¼öÁ¤Çϱâ À§ÇÑ Ç÷¡±× ºñÆ®µéÀÌ ÀÖ´Ù. ±×µéÀº inclusive-or¸¦ »ç¿ëÇÏ¿© ±â º»ÀûÀΠŸÀÔµé°ú Á¶ÇյǾîÁø´Ù.
PA_FLAG_PTR
¸¸ÀÏ ÀÌ ºñÆ®°¡ ¼¼Æ®µÇ¸é, ±×°ÍÀº ±âº»ÀûÀΠŸÀÔÀ» °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ±âÈ£ÈÇÑ Å¸ÀÔÀ» ÁöÁ¤ÇÑ´Ù.
¿¹¸¦ µé¾î,
'PA_INT|PA_FLAG_PTR' À̰ÍÀº 'int *'À» ³ªÅ¸³½´Ù.
PA_FLAG_SHORT
¸¸ÀÏ ÀÌ ºñÆ®°¡ ¼¼Æ®µÇ¸é, short·Î ¼öÁ¤µÈ ±âº»ÀûÀΠŸÀÔÀ» ÁöÁ¤ÇÑ´Ù. ( À̰ÍÀº ŸÀÔ ¼öÁ¤ÀÚ 'h'¿¡ ÇØ ´çÇÑ´Ù)
PA_FLAG_LONG
¸¸ÀÏ ÀÌ ºñÆ®°¡ ¼¼Æ®µÇ¸é, longÇüÀ¸·Î ¼öÁ¤µÈ ±âº»ÀûÀΠŸÀÔÀ» ÁöÁ¤ÇÑ´Ù.( À̰ÍÀº ŸÀÔ¼öÁ¤ÀÚ 'l'¿¡ ÇØ ´çÇÑ´Ù.)
PA_FLAG_LONG_LONG
¸¸ÀÏ ÀÌ ºñÆ®°¡ ¼¼Æ®µÇ¸é, long longÀ¸·Î ¼öÁ¤µÈ ±âº»Å¸ÀÔÀ» ÁöÁ¤ÇÑ´Ù.( À̰ÍÀº ŸÀÔ¼öÁ¤ÀÚ 'L'¿¡ ÇØ ´çÇÑ´Ù.)
PA_FLAG_LONG_DOUBLE
À̰ÍÀº PA_FLAG_LONG_LONGÀÇ µ¿ÀǾî·Î½á, long doubleÇüÀ» ÁöÁ¤ÇϱâÀ§ÇØ PA_DOUBLEÀÇ ±âº» ÀûÀΠŸÀÔ°ú ÇÔ²² Çù¾àÀ¸·Î »ç¿ëµÆ´Ù.
7.9.11 ÅÛÇø´ ½ºÆ®¸µ ÆÄ½ÌÀÇ ¿¹
¿©±â¿¡ Æ÷¸Ë ½ºÆ®¸µÀ» °¡Áö°í Àμö ŸÀÔµéÀ» ÇØ¼®ÇÏ´Â ¿¹°¡ ÀÖ´Ù. ¿ì¸®´Â À̰ÍÀ» NUMBER, CHAR, STRING°ú STRUCTUREÀÇ Å¸ÀÔ ÀμöµéÀ» Æ÷ÇÑÇÑ ÇØ¼®±âÀÇ ÀϺκÐÀ̶ó°í °¡Á¤ÇÑ´Ù.
/* º¤ÅÍ args¾È¿¡ Á¤ÇØÁø objectsÀÎ nargs°¡ Æ÷¸Ë ½ºÆ®¸µ formatÀ¸·Î À¯¿ëÇÑÁö Å×½ºÆ® Ç϶ó. ¸¸¾à ±×·¸´Ù¸é 1ÀÏ ¸®ÅÏÇϰí, ±×·¸Áö ¾Ê´Ù¸é 0À» ¸®ÅÏÇÑÈÄ ¿¡·¯¸Þ¼¼Áö¸¦ Ãâ·ÂÇÑ´Ù. */
int
validate_args (char *format, int nargs, OBJECT *args)
{
int *argtypes;
int nwanted;
/* ±× Àμöµé¿¡ ´ëÇÑ °¢ º¯È¯ ÁöÁ¤Àº Àû¾îµµ µÎ °³ÀÇ ¹®ÀÚ°¡
±æ¾î¾ß Çϰí, ±×°Íº¸´Ù ´õ ±æ°Ô ÇÒ¼ö ´Â ¾ø´Ù. */
argtypes = (int *) alloca (strlen (format) / 2 * sizeof (int));
nwanted = parse_printf_format (string, nelts, argtypes);
/* ÀμöµéÀÇ ¼ö¸¦ üũÇ϶ó. */
if (nwanted > nargs)
{
error ("too few arguments (at least %d required)", nwanted);
return 0;
}
/* °¢ ÀμöµéÀÇ Å¸ÀÔÀ» üũÇϰí, ±× objectsµéÀÌ Àû´çÇÏ°Ô ÁÖ¾îÁ³´ÂÁö º¸¶ó */
for (i = 0; i < nwanted; i++)
{
int wanted;
if (argtypes[i] & PA_FLAG_PTR)
wanted = STRUCTURE;
else
switch (argtypes[i] & ~PA_FLAG_MASK)
{
case PA_INT:
case PA_FLOAT:
case PA_DOUBLE:
wanted = NUMBER;
break;
case PA_CHAR:
wanted = CHAR;
break;
case PA_STRING:
wanted = STRING;
break;
case PA_POINTER:
wanted = STRUCTURE;
break;
}
if (TYPE (args[i]) != wanted)
{
error ("type mismatch for arg number %d",i);
return 0;
}
}
return 1;
}
7.10 printf ÁÖ¹®Çϱâ
GNU C¶óÀ̺귯¸®´Â ´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÇ Áß¿äÇÑ µ¥ÀÌÅÍ ±¸Á¶¸¦ ÇÁ¸°Æ®ÇϱâÀ§ÇØ printf¿¡°Ô °¡¸£ÃÄÁÖ ´Â ¿µ¸®ÇÑ ¹æ¹ýÀ¸·Î printf ÅÛÇø´ ½ºÆ®¸µÀ» ÁöÁ¤ÇÏ¿© ´ç½ÅÀÌ ÁÖ¹®ÇÑ ¹æ¹ýÀ¸·Î º¯È¯À» ÇàÇÒ¼ö ÀÖµµ·Ï Á¤ÀÇÇÏ´Â °ÍÀÌ Çã¿ëµÈ´Ù.
´ç½ÅÀÌ ÀÌó·³ ÇÏ´Â ¹æ¹ýÀº register_printf_functionÇÔ¼ö·Î ±× º¯È¯À» µî·ÏÇÏ´Â °ÍÀÌ´Ù.; 7.10.1Àý [Registering New Conbersions] 82ÆäÀÌÁö¸¦ ÂüÁ¶. ´ç½ÅÀÌ ÀÌ ÇÔ¼ö¿¡ ³Ñ°ÜÁÙ ÀμöÁõ Çϳª´Â Ãâ·ÂÀ» ¸¸µé¾î³»´Â Çڵ鷯 ÇÔ¼ö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù; 7.10.3Àý [Defining the Output Handler] 83ÆäÀÌÁö¸¦ ÂüÁ¶ÇÏ¿© ÀÌ ÇÔ¼ö¸¦ ¾î¶»°Ô ¾²´ÂÁö Á¤º¸¸¦ ¾ò¾î¶ó.
´ç½ÅÀº º¯È¯ Áö½ÃÀÚ¿¡ ÀÇÇØ ¿¹»óµÈ ÀμöµéÀÇ ¼ö¿Í ŸÀÔ¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö¸¦ ÀνºÅçÇÒ¼ö ÀÖ´Ù. À̰Ϳ¡ ´ëÇÑ Á¤º¸´Â 7.9.10Àý [Parsing a Template String] ÆäÀÌÁö 79¸¦ ÂüÁ¶Ç϶ó.
ÀÌÀý¿¡¼ ¼³¸íÇϰí ÀÖ´Â µµ±¸µéÀº Çì´õÈÀÏ 'printf.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ȣȯ¼º ³ëÆ®: printf ÅÛÇø´ ½ºÆ®¸µÀÇ ±¸¹®À» ¿¬ÀåÇÏ´Â ´É·ÂÀº GNUÈ®ÀåÀÌ´Ù. ANSI Ç¥ÁØ C´Â ÀÌ¿Í À¯»çÇÑ °ÍÀÌ ¾Æ¹«°Íµµ ¾ø´Ù.
7.10.1 »õ·Î¿î º¯È¯ µî·ÏÇϱâ
register_printf_functionÀº »õ·Î¿î Ãâ·Â º¯È¯À» µî·ÏÇÏ´Â ÇÔ¼ö·Î 'printf.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö :
int register__printf__function (int spec, printf_function handler_function, printf_arginfo_function arginfo_function)
ÀÌ ÇÔ¼ö´Â ¹®ÀÚ spec º¯È¯ Áö½ÃÀÚ¸¦ Á¤ÀÇÇÑ´Ù. ±×·¯¹Ç·Î ¸¸ÀÏ specÀÌ 'q'¶ó¸é ±×°ÍÀº '%q'·Î º¯È¯ µÇ¾î Á¤ÀǵȴÙ. handler_functionÀº ÅÛÇø´ ½ºÆ®¸µ¾È¿¡ ÀÌ·¯ÇÑ º¯È¯ÀÌ ³ªÅ¸³¯ ¶§ printf¿Í ±× À¯»ç ÇÔ¼öµé¿¡ ÀÇÇØ È£ÃâµÇ´Â ÇÔ¼öÀÌ´Ù. À̰ÍÀ» Àμö·Î ³Ñ±â±â À§ÇÑ ÇÔ¼ö¸¦ ¾î¶»°Ô Á¤ÀÇÇϴ°¡¿¡ ´ëÇÑ Á¤ º¸´Â 7.10.3Àý [Defining the Output Handler] 83ÆäÀÌÁö ÂüÁ¶Ç϶ó. ¸¸ÀÏ ´ç½ÅÀÌ ³Î Æ÷ÀÎÅ͸¦ ÁöÁ¤ÇÏ ¸é specÀ» À§ÇØ Á¸ÀçÇÑ ¾î´À handler functionÀÌ Á¦°ÅµÈ´Ù.
arginfo_functionÀº ÀÌ º¯È¯ÀÌ ÅÛÇø´ ½ºÆ®¸µ¾È¿¡ ³ªÅ¸³¯ ¶§ parse_printf_format ¿¡ ÀÇÇØ È£ÃâµÇ´Â ÇÔ¼öÀÌ´Ù. À̰Ϳ¡ ´ëÇÑ Á¤º¸´Â 7.9.10Àý[Parsing a Template String] 79ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó.
ÀϹÝÀûÀ¸·Î ´ç½ÅÀº º¯È¯À» À§Çؼ µÎ °³ÀÇ ÇÔ¼ö¸¦ µ¿½Ã¿¡ ÀνºÅç ÇØ¾ßÇÏÁö¸¸ ¸¸¾à ´ç½ÅÀÌ °áÄÚ parse_printf_foramt¸¦ È£ÃâÇÏÁö ¾Ê´Â´Ù¸é, ´ç½ÅÀº arginfoÇÔ¼ö¸¦ Á¤ÀÇÇÒ Çʿ䰡 ¾ø´Ù. ¼º°øÇÏ¸é ¸® ÅϰªÀº 0À̰í, ½ÇÆÐÇϸé -1ÀÌ´Ù. ( ¸¸¾à specÀÌ ¹üÀ§¸¦ ¹þ¾î³ª´Â °æ¿ì )
´ç½ÅÀº ±âº» Ãâ·Â º¯È¯À» ÀçÁ¤ÀÇ ÇÒ¼öµµ ÀÖÁö¸¸, À̰ÍÀº È¥¶õÀÇ °¡´É¼ºÀÌ ¸¹±â ¶§¹®¿¡ ÁÁÀº »ý°¢ÀÌ ¾Æ´Ï´Ù. ´ç½ÅÀÌ ÀçÁ¤ÀÇ Çß´Ù¸é ´Ù¸¥ »ç¶÷¿¡ ÀÇÇØ ¾º¿©Áø ¶óÀ̺귯¸® ·çƾÀº ÆÄ±«µÉ¼ö ÀÖ´Ù.
7.10.2 º¯È¯ Áö½ÃÀÚ ¿É¼Çµé
¸¸ÀÏ ´ç½ÅÀÌ '%q'ÀÇ Àǹ̸¦ Á¤ÀÇÇß´Ù¸é, ±×°ÍÀÌ Æ÷ÇÔµÈ '%+23q'³ª '%-#q'´Â ¹«½¼ ÀǹÌÀΰ¡? ÀÌ Àǹ̸¦ ºÐº°Çϱâ À§ÇÑ µµ±¸·Î Çڵ鷯°¡ È£ÃâµÇ´Âµ¥ ±×°ÍÀº ÅÛÇø´ÀÇ ¿É¼ÇÀÇ ¸í¼¼¸¦ ¾òµµ·Ï µµ¿ÍÁØ ´Ù.
register_printf_function¿¡°Ô ÁÖ¾îÁö´Â handler_function°ú arginfo_function Àμö´Â º¯È¯ Áö½ÃÀÚÀÇ »ç ·Ê¾È¿¡ ³ªÅ¸³ª´Â ¿É¼Çµé¿¡ ´ëÇÑ Á¤º¸¸¦ Æ÷ÇÔÇÏ´Â ±¸Á¶Ã¼ printf_infoÀÇ Å¸ÀÔÀ» Àμö·Î½á ¹Þ¾ÆµéÀδÙ. ÀÌ µ¥ÀÌÅÍ Å¸ÀÔÀº Çì´õÈÀÏ 'printf.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ŸÀÔ : struct printf__info
ÀÌ ±¸Á¶Ã¼´Â printf ÅÛÇø´ ½ºÆ®¸µ¾È¿¡ ÀÖ´Â º¯È¯ Áö½ÃÀÚÀÇ ÀνºÅº½º¿¡ ³ªÅ¸³ ¿É¼Ç¿¡ ´ëÇÑ Á¤º¸¸¦ ³Ñ±â±â À§ÇØ »ç¿ëµÈ´Ù. ±×°ÍÀº ´ÙÀ½°ú °°´Ù.
int prec
À̰ÍÀº ¹èÁ¤µµ¿¡ ´ëÇÑ Áö½ÃÀÚÀÌ´Ù. ÀÌ °ªÀº ¸¸¾à ¾Æ¹«°Íµµ Áö½ÃµÇÁö ¾ÊÀ¸¸é -1ÀÌ´Ù. ¸¸¾à ¹èÁ¤µµ °¡ '*'·Î ÁÖ¾îÁ³´Ù¸é, Çڵ鷯 ÇÔ¼ö¿¡ ÁÖ¾îÁø printf_info ±¸Á¶Ã¼´Â Àμö ¸®½ºÆ®·ÎºÎÅÍ º¹±¸½Ãų ½ÇÁ¦ ÀÇ °ªÀ» Æ÷ÇÔÇϰí ÀÖ´Ù. ±×·¯³ª ±× ±¸Á¶Ã¼°¡ INT_MINÀÇ °ªÀ» °¡Áö°í arginfoÇÔ¼ö¿¡ ÁÖ¾îÁø´Ù¸é ±× ½ÇÁ¦ÀÇ °ªÀº ¾Ë¼ö ¾ø´Ù.
int width
À̰ÍÀº ÃÖ¼Ò ÇÊµå ³Êºñ¸¦ ÁöÁ¤ÇÑ´Ù. ±× °ªÀÌ 0ÀÌ¸é ¾Æ¹« ³Êºñµµ Á¤ÇØÁöÁö ¾ÊÀº °ÍÀÌ´Ù. ¸¸ÀÏ ±× ÇÊ µåÀÇ ³Êºñ°¡ '*'·Î ÁÖ¾îÁö¸é, Çڵ鷯 ÇÔ¼ö¿¡ ³Ñ°ÅÁø printf_info ±¸Á¶Ã¼´Â Àμö ¸®½ºÆ®·ÎºÎÅÍ º¹±¸µÉ ½ÇÁ¦ÀÇ °ªÀ» Æ÷ÇÔÇϰí ÀÖ´Ù. ±×·¯³ª arginfo ÇÔ¼ö¿¡ ÁÖ¾îÁø ±× ±¸Á¶Ã¼°¡ INI-MINÀ» Æ÷ÇÔÇϰí ÀÖÀ¸ ¸é ±× ½ÇÁ¦ÀÇ °ªÀÌ ¹«¾ùÀÎÁö ¾Ë¼ö ¾ø´Ù.
char spec
À̰ÍÀº Ưº°ÈµÈ ¹®ÀÚº¯È¯ Áö½ÃÀÚÀÌ´Ù. ¿©·¯°³ÀÇ ¹®ÀÚµéÀ» À§ÇØ °°Àº Çڵ鷯 ÇÔ¼ö¿¡ µî·Ï½Ãų¼ö ÀÖ ´Â ±¸Á¶Ã¼¿¡ ÀúÀåµÇ¾î ÀÖÁö¸¸ ¿©ÀüÈ÷ Çڵ鷯 ÇÔ¼ö¿¡ È£ÃâµÇ¾îÁ³À» ¶§ ±×µé¿¡°Ô ¸»ÇØÁÙ¼ö ÀÖ´Â ¹æ ¹ýÀ» °¡Áö°í ÀÖ´Ù.
unsigned int is_long_double
À̰ÍÀº ¸¸¾à 'L'ÇüÀÇ ¼öÁ¤ÀÚ°¡ ÁöÁ¤µÇ¸é ÂüÀÎ ³í¸®ÇüÀÌ´Ù.
unsigned int is_double
À̰ÍÀº ¸¸¾à 'h'ÇüÀÇ ¼öÁ¤ÀÚ°¡ ÁöÁ¤µÇ¸é ÂüÀÎ ³í¸®ÇüÀÌ´Ù.
unsigned int is_long
À̰ÍÀº ¸¸¾à 'l'ÇüÀÇ ¼öÁ¤ÀÚ°¡ ÁöÁ¤µÇ¸é ÂüÀÎ ³í¸®ÇüÀÌ´Ù.
unsigned int alt
À̰ÍÀº ¸¸ÀÏ '#' Ç÷¡±×°¡ ÁöÁ¤µÇ¸é ÂüÀÎ ³í¸®ÇüÀÌ´Ù.
unsigned int space
À̰ÍÀº ¸¸ÀÏ ' 'Ç÷¡±×°¡ ÁöÁ¤µÇ¸é ÂüÀÎ ³í¸®ÇüÀÌ´Ù.
unsigned it left
À̰ÍÀº ¸¸ÀÏ '-' Ç÷¡±×°¡ ÁöÁ¤µÇ¸é ÂüÀÎ ³í¸®ÇüÀÌ´Ù.
unsigned int showsign
À̰ÍÀº ¸¸ÀÏ '+' Ç÷¡±×°¡ ÁöÁ¤µÇ¸é ÂüÀÎ ³í¸®ÇüÀÌ´Ù.
char pad
À̰ÍÀº ÃÖ¼Ò ÇÊµå ³ÊºñÀÇ Ãâ·Â¿¡ µ¡ºÙ¿©Áú ¶§ »ç¿ëÇÏ´Â ¹®ÀÚÀÌ´Ù. ±× Ç÷¡±×°¡ '0'ÀÌ¸é °ªÀÌ '0'ÀÌÁö ¸¸ ' 'ÀÌ¸é ´Ù¸£´Ù.
7.10.3 Ãâ·Â Çڵ鷯 Á¤ÀÇÇϱâ
ÀÌÁ¦ register_printf_function¿¡°Ô Àμö·Î½á ÁÖ¾îÁö°ÔµÉ Çڵ鷯¿Í arginfo ÇÔ¼öµéÀ» ¾î¶»°Ô Á¤ÀÇÇÏ´Â Áö »ìÆìº¸ÀÚ
´ç½ÅÀº ÇÁ·ÎÅäŸÀÔ°ú ÇÔ²² ´ç½ÅÀÇ Çڵ鷯 ÇÔ¼ö¸¦ Á¤ÀÇÇÒ¼ö ÀÖ´Ù.
int function (FILE *stream, const struct printf_info *info, va_list *ap_pointer)
¿©±âÀÇ Çڵ鷯 ÇÔ¼ö¿¡ ³Ñ°ÜÁø stream Àμö´Â Ãâ·ÂÀ¸·Î ¾²±âÀ§ÇÑ ½ºÆ®¸²ÀÌ´Ù.
¿©±âÀÇ info Àμö´Â ÅÛÇø´ ½ºÆ®¸µ¾ÈÀÇ º¯È¯À» Æ÷ÇÔÇϰí ÀÖ´Â ´Ù¾çÇÑ ¿É¼Ç¿¡ ´ëÇÑ Á¤º¸¸¦ Æ÷ÇÔÇϰí ÀÖ´Â ±¸Á¶Ã¼¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. ´ç½ÅÀº ´ç½ÅÀÇ Çڵ鷯 ÇÔ¼ö ³»ºÎ¿¡¼ ÀÌ ±¸Á¶Ã¼¸¦ ¼öÁ¤ÇÒ ¼ö ´Â ¾ø´Ù. ÀÌ µ¥ÀÌÅÍ ±¸Á¶¸¦ ³ªÅ¸³»´Â °ÍÀº 7.10.2Àý [Conversion Specifier Options]¸¦ ÂüÁ¶Ç϶ó.
¿©±â¼ ap_pointerÀμö´Â ´ç½ÅÀÇ Çڵ鷯¿¡ ÇÁ¸°Æ®µÇ¾îÁú °ªÀ» Æ÷ÇÔÇϰí ÀÖ´Â º¯¼ö Àμö ¸®½ºÆ®ÀÇ ²¿ ¸®¸¦ ³Ñ±â±âÀ§ÇØ »ç¿ëµÇ¾îÁø´Ù. ´Ù¸¥ ÇÔ¼öµéÀÌ ¸í¹éÇÏ°Ô º¯¼ö Àμö ¸®½ºÆ®¸¦ ³Ñ°ÜÁú¼ö ÀÖ´Â °Í°ú´Â ´Þ¸® ¿©±â¼´Â va_list ±× ÀÚü°¡ ¾Æ´Ï¶ó va_list¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. ±×·¡¼ ´ç½ÅÀº va_argÀÇ ¹æ¹ýÀ¸·Î ÀμöµéÀ» ÃßÃâÇÒ¼ö ÀÖÀ» °ÍÀÌ´Ù.
(Æ÷ÀÎÅÍ ³Ñ±â±â°¡ ´ç½ÅÀÇ Çڵ鷯 ÇÁ·Î¼¼½ºµéÀÎ ÀμöµéÀ» ¼¼±â À§Çؼ ÀÚ½ÅÀÇ va_list º¯¼ö¸¦ °»½ÅÇÏ ±â À§ÇÑ ÀÚ½ÅÀÇ Çڵ鷯 ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÇÔ¼ö¿¡Çã¿ëµÈ´Ù. A.2Àý [Variadic Functions] 382 ÆäÀÌÁö Âü Á¶.)
´ç½ÅÀÇ Çڵ鷯 ÇÔ¼ö´Â ´ÜÁö printfó·³ °ªÀ» ¸®ÅϽÃų °ÍÀÌ´Ù: ±×°ÍÀº Ãâ·ÂµÈ ¹®ÀÚµéÀÇ ¼ö¸¦ ¸®ÅÏÇÏ °Å³ª ¿¡·¯°¡ ³ª¸é À½ÀÇ °ªÀ» ¸®ÅÏÇÒ °ÍÀÌ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : printf__function
À̰ÍÀº Çڵ鷯 ÇÔ¼ö°¡ °¡Áú¼ö ÀÖ´Â µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ´ç½ÅÀÇ ÀÀ¿ë ÇÁ·Î±×·¥¾È¿¡ parse_printf_format¸¦ »ç¿ëÇÏ·ÁÇϸé, ´ç½ÅÀº ´ç½ÅÀÌ register_printf_functionÀ¸·Î ÀνºÅçÇÑ »õ·Î¿î °¢ °¢ÀÇ º¯È¯À» À§Çؼ arginfo_functionÀ» Àμö·Î ³Ñ°ÜÁÖ±â À§ÇÑ ÇÔ¼ö¸¦ Á¤ÀÇÇØ¾ßÇÑ´Ù.
´ç½ÅÀº ´ÙÀ½°ú °°ÀÌ ÇÁ·ÎÅäŸÀÔ°ú ÇÔ²² À̵é ÇÔ¼ö¸¦ Á¤ÀÇÇÒ¼ö ÀÖ´Ù.
int function (const suruct printf_info *info, size_t n, int *argtypes)
±× ÇÔ¼ö·ÎºÎÅÍ ¸®ÅϵǴ °ªÀº º¯È¯ ¿¹»óµÇ´Â ÀμöµéÀÇ ¼ö°¡ µÇ¾îÁú °ÍÀÌ´Ù. ±× ÇÔ¼ö´Â ¶ÇÇÑ ÀÌ Àμö µé °¢°¢ÀÇ Å¸ÀÔ¿¡ ´ëÇÑ Á¤º¸·Î½á argtypes ¹è¿ÀÇ n°³ÀÇ ¿ä¼Ò¸¦ ä¿î´Ù. ÀÌ Á¤º¸´Â ´Ù¾çÇÑ 'PA_' ¸¶Å©·Î¸¦ »ç¿ëÇÏ¿© ±âȣȵȴÙ. ( ´ç½ÅÀº À̰ÍÀÌ parse_printf_format¿¡¼ »ç¿ëµÇ´Â µ¿ÀÏÇÑ È£Ãâ Çù ¾àÀÓÀ» ±â¾ïÇÒ °ÍÀÌ´Ù. )
µ¥ÀÌÅÍ Å¸ÀÔ : printf__ arginfo__function
ÀÌ Å¸ÀÔÀº º¯È¯ Áö½ÃÀÚ¿¡ ÀÇÇØ »ç¿ëµÈ ÀμöµéÀÇ °³¼ö¿Í ŸÀÔ¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö¸¦ ¼³¸í Çϱâ À§ÇØ »ç¿ëµÇ¾îÁø´Ù.
7.10.4 printf È®Àå ¿¹Á¦
¿©±â¿¡ printf Çڵ鷯 ÇÔ¼ö¸¦ ¾î¶»°Ô Á¤ÀÇÇÏ´ÂÁö º¸¿©ÁÖ´Â ¿¹Á¦°¡ ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº WidgetÀ̶ó °í ºÒ¸®´Â µ¥ÀÌÅÍ ±¸Á¶¸¦ Á¤ÀÇÇÏ°í µ¥ÀÌÅÍ ±¸Á¶¾È¿¡ Æ÷ÀÎÅÍ °ª°ú À̸§À» Æ÷ÇÔÇϰí ÀÖ´Â Widget * Àμöµé¿¡ ´ëÇØ¼´Â '%W'¶ó°í º¯È¯µÇµµ·Ï printf Á¤º¸¸¦ Á¤ÀÇÇÑ´Ù. '%W'º¯È¯Àº ÃÖ¼Ò ÇÊµå ³Êºñ¿Í ¿ÞÂÊ Á¤·Ä ¿É¼ÇÀ» Áö¿øÇÏÁö¸¸ ±×¿Ü ¸ðµç °ÍÀº °ÅºÎµÈ´Ù.
#include <stdio.h>
#include <printf.h>
#include <stdarg.h>
typedef struct
{
char *name;
} Widget;
int print_widget (FILE *stream, const struct printf_info *info, va_list *app)
{
Widget *w;
char *buffer;
int len;
/* ¹®ÀÚ¿¾È¿¡ Ãâ·ÂÀ» Æ÷¸ËÇ϶ó */
w = va_arg (*app, Widget *);
len = asprintf (&buffer, "<Widget %p: %s>", w, w->name);
if (len == -1)
return -1;
/* ÃÖ¼Ò ÇÊµå ³Êºñ¿¡ µ¡ºÙ¿©¼, ½ºÆ®¸²À» ÇÁ¸°Æ®Ç϶ó. */
len = fprintf (stream, "%*s", (info->left ? - info->width : info->width), buffer);
/* Áö¿ì°í ¸®ÅÏÇ϶ó */
free (buffer);
return len;
}
int main (void)
{
/* ÇÁ¸°Æ® ÇϱâÀ§ÇØ widget¸¦ ¸¸µé¾î¶ó */
Widget mywidget;
mywidget.name = "mywidget";
/* widgets¸¦ print ÇÔ¼ö¿¡ µî·ÏÇ϶ó. */
register_printf_function ('W', print_widget, NULL);
/* arginfo°¡ ¾Æ´Ï´Ù. ÀÌÁ¦ widget¸¦ ÇÁ¸°Æ® Ç϶ó. */
printf ("|%W|\n", &mywidget);
printf ("|%35W|\n", &mywidget);
printf ("|%-35W|\n", &mywidget);
return 0;
}
ÀÌ ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀº ´ÙÀ½°ú °°´Ù.
|<Widget 0xffeffb7c: mywidget> |
| <Widget 0xffeffb7c: mywidget>|
|<Widget 0xffeffb7c: mywidget> |
7.11 Çü½ÄÈµÈ ÀÔ·Â
ÀÌ Àý¿¡ ¼¼úµÈ ÇÔ¼öµé(scanf¿Í °ü·ÃÇÔ¼öµé)Àº Çü½ÄÈµÈ Ãâ·Âµµ±¸µé°ú À¯»çÇÑ Çü½ÄÈµÈ ÀÔ·ÂÀ» À§ÇÑ
µµ±¸µéÀ» Á¦°øÇÑ´Ù.ÀÌ ÇÔ¼öµéÀº Æ÷¸Ë ¹®ÀÚ¿°ú ÅÛÇø®Æ® ¹®ÀÚ¿ÀÇ ÅëÁ¦ÇÏ¿¡ ÀÓÀÇÀÇ °ªÀ» Àоî¿À´Â ¸ÞÄ«´ÏÁòÀ» Á¦°øÇÑ´Ù.
7.11.1 Çü½ÄÈµÈ ÀÔ·ÂÀÇ ±âÃÊ
scanf ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâÀº ÀÓÀÇÀÇ ÀμöµéÀÌ ÅÛÇø®Æ® ¹®ÀÚ¿ÀÇ ÅëÁ¦ÇÏ¿¡¼ ÀÐÈù´Ù´Â Á¡¿¡¼ ÇÇ»óÀû À¸·Î´Â printf ÇÔ¼ö¿¡ ´ëÇÑ È£Ãâ°ú À¯»çÇÏ´Ù. ÅÛÇø®Æ®¿¡¼ÀÇ º¯È¯ÀÚ ÁöÁ¤ ¹®ÀåÀÌ printf¿¡¼ÀÇ ±×°Í °ú ¸Å¿ì À¯»çÇÑ ¹Ý¸é¿¡,±× ÅÛÇø®Æ®ÀÇ ÇØ¼®Àº °íÁ¤Çʵå Çü½Äȶó±â º¸´Ù´Â ÀÚÀ¯Çü½Ä ÀԷ°ú ´Ü¼øÇü ½Ä ¾î¿ï¸®±â¶ó º¼ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,´ëºÎºÐÀÇ scanf º¯È¯ÀÚµéÀº ¾ó¸¶¸¸ÅÀ̵ç "°ø¹é"(°ø¹é,ÅÇ,°³Çà À» Æ÷ÇÔ)À» ¶Ù¾î³ÑÀ¸¸ç, ÇØ´ç Ãâ·Âº¯È¯ÀÚ¿¡ ´ëÇÑ »ó¼¼ÁöÁ¤ÀÇ °³³äÀº ÀÖ¾ú´ø ¹Ý¸é¿¡ ¼öÄ¡ÀÔ·Â º¯È¯ÀÚ ¿¡ ´ëÇÑ »ó¼¼ÁöÁ¤ÀÇ °³³äÀÌ ÀüÇô ¾ø´Ù.º¸Åë,ÅÛÇø®Æ® ³»¿¡¼ÀÇ °ø¹éÀÌ ¾Æ´Ñ ¹®ÀÚµéÀº Ãâ·Â ½ºÆ®¸² ³» ÀÇ ¹®ÀÚµé°ú Á¤È®ÇÏ°Ô ÀÏÄ¡ ÇÑ´Ù.±×·¯³ª,ÀÏÄ¡½ÃŰ±â ½ÇÆÐ´Â ½ºÆ®¸² »ó¿¡¼ÀÇ ÀÔ·Â ¿¡·¯¿Í´Â ´Ù¸£´Ù.
scanf°¡ printf¿Í ´Ù¸¥ Á¡ÀÇ ¶Ç´Ù¸¥ Çϳª´Â scanf¿¡ ´ëÇÑ ¼±ÅÃÀû Àμö·Î¼´Â Á÷Á¢ÀûÀÎ °ª ´ë½Å¿¡ Æ÷ ÀÎÅ͸¦ °ø±ÞÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù; ÀÐÇôÁö´Â °ªÀº Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â ´ë»ó¹°¿¡ ÀúÀåµÈ´Ù. ³ë·ÃÇÑ ÇÁ ·Î±×·¡¸ÓµéÁ¶Â÷µµ Á¾Á¾ ÀÌ Á¡À» Àؾî¹ö¸®´Â ¼ö°¡ ÀÖ´Ù.±×·¯¹Ç·Î ¸¸¾à¿¡ ´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÌ scanf¿Í
°ü·ÃµÈ °Íó·³ º¸ÀÌ´Â ¿¡·¯¸¦ ¸¸³¯ ¶§´Â ´ç½ÅÀº À̰ÍÀ» ´Ù½Ã üũÇ϶ó.
ÀÏÄ¡ ½ÇÆÐ Çö»óÀÌ ÀϾ¸é scanf´Â ù ¹øÂ°ÀÇ ºÒÀÏÄ¡ ¹®ÀÚ¸¦ Á¦ÃÄµÎ°í ½ºÆ®¸²¿¡¼ ÀÐÈ÷´Â ´ÙÀ½ ¹® ÀÚ¸¦ ¹ÝȯÇÑ´Ù.scanf°¡ µÇµ¹¸®´Â Á¤»óÀûÀÎ ¹Ýȯ °ªÀº ÇÒ´çµÈ °ªµéÀÇ °¹¼öÀÌ´Ù.±×·¯¹Ç·Î ´ç½ÅÀº ¸ðµç ±â´ë°ªÀÌ ÀÐÇôÁö±â Àü¿¡ ÀÏÄ¡½ÃŰ±â ¿¡·¯°¡ ¹ß»ýÇÏ¿´´ÂÁö¸¦ ¾Ë¾Æº¸±â À§ÇØ À̰ÍÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
scanf ÇÔ¼ö´Â ÀüÇüÀûÀ¸·Î Å×ÀÌºí ³»¿ë Àбâ¿Í °°Àº ÀϵéÀ» Çϱâ À§ÇØ »ç¿ëµÈ´Ù.¿¹¸¦ µé¾î,doubleÇüÀÇ ¹è¿À» ÃʱâÈÇϱâ À§ÇØ scanf¸¦ »ç¿ëÇÏ´Â ÇÔ¼ö°¡ ÀÖ´Ù.
void readarray (double *array, int n)
{
int i;
for (i=0; i<n; i++)
if (scanf (" %lf", &(array[i])) != 1)
invalid_input_error ();
/*°¢ ¹è¿¿ä¼Ò¿¡ 1°³¾¿ÀÇ ¼ýÀÚ¸¸ µé¾î ÀÖÀ¸¸é, º°ÀÏÀÌ ¾ø°ÚÀ¸³ª, ¼ýÀÚ°¡ ¾È µé¾îÀÖµçÁö 2°³(?)°¡ µé ¾î ÀÖÀ¸¸é ¿¡·¯ º¸°í??? */
}
Çü½ÄÈµÈ ÀÔ·ÂÀº Çü½ÄÈµÈ Ãâ·Â¸¸Å ÀÚÁÖ ¾²ÀÌÁö´Â ¾Ê´Â´Ù.¾î´À ¸é¿¡¼´Â À̰ÍÀº Çü½ÄÈµÈ ÀÔ·ÂÀ» ÀûÀýÈ÷ »ç¿ëÇÏ´Â µ¥¿¡ ÁÖÀǸ¦ ¿äÇϱ⠶§¹®À̱⵵ ÇÏ´Ù.¶Ç ´Ù¸¥ ÀÌÀ¯´Â ÀÏÄ¡½ÃŰ±â ¿¡·¯¿¡¼ ¹þ¾î³ª ±â ¾î·Æ±â ¶§¹®ÀÌ´Ù.
¸¸¾à ´ç½ÅÀÌ ´ÜÀÏÇÑ,°íÁ¤ÀûÀÎ Çü½Ä¿¡ µé¾î¸ÂÁö ¾Ê´Â ÀÔ·ÂÀ» ÀаíÀÚ ÇÑ´Ù¸é,´ç½ÅÀº scanf¸¦ »ç¿ëÇϱ⠺¸´Ù´Â ¾îÈÖ ½ºÄ³³Ê¸¦ ¹ß»ý½ÃŰ´Â Flex¶óµç°¡ ºÐ¼®ÀÚ¸¦ ¹ß»ý½ÃŰ´Â Bison°ú °°Àº ÅøÀ» »ç¿ëÇÏ´Â ÆíÀÌ ÁÁ´Ù.ÀÌ¿¡ ´ëÇÑ »ó¼¼ÇÑ Á¤º¸´Â Flex¿¡ ÀÖ´Â "Flex"ÀýÀ» ÂüÁ¶Ç϶ó:¾îÈÖ ½ºÄ³³Ê ¹ß»ý±â¿Í Bison ·¹ÆÛ·±½º ¾È³»¼¿¡ ÀÖ´Â "Bison"ÀýÀ» ÂüÁ¶ÇÒ °Í.
7.11.2 ÀÔ·Â º¯È¯ÀÚ ¹®Àå
scanf ÅÛÇø®Æ® ¹®ÀÚ¿Àº '%'·Î ½ÃÀ۵Ǵ º¯È¯ ÁöÁ¤ÀÚµéÀÌ Áß°£Áß°£¿¡ ¹ÚÇôÀÖ´Â Åë»óÀûÀÎ ¼ö¹ÙÀÌÆ® ¹®ÀÚ¸¦ ´ã°í ÀÖ´Â ¹®ÀÚ¿ÀÌ´Ù.
ÅÛÇø®Æ®¿¡¼ÀÇ °ø¹é¹®ÀÚ(isspace ÇÔ¼ö¿¡ ÀÇÇØ Á¤ÀÇµÈ °Íµé;4.1 [¹®ÀÚ ºÐ·ù],41ÂÊ ÂüÁ¶.)´Â ÀÔ·Â ½ºÆ® ¸²³»¿¡¼ ¸î°³ÀÇ °ø¹é¹®ÀÚ°¡ ÀÐÈ÷°Å³ª Æ÷±âµÇ°Ô ÇÏ´Â Çö»óÀ» ¾ß±âÇÑ´Ù.ÀÏÄ¡ÇÏ´Â °ø¹é¹®ÀÚµéÀÌ ¹Ýµå ½Ã ÅÛÇø®Æ®¿¡¼ ³ªÅ¸³ª´Â °ø¹é¹®ÀÚµé°ú ²À °°À» ÇÊ¿ä´Â ¾ø´Ù.¿¹¸¦ µé¾î,ÄÞ¸¶¸¦ ÀνĽÃ۱â À§Çؼ ¾ÕµÚ¿¡ ¼±ÅÃÀûÀÎ °ø¹éÀ» Ãß°¡ÇÏ¿© ÅÛÇø®Æ® ³»¿¡ ' , '¶ó°í ¾²´Â °æ¿ì.
ÅÛÇø®Æ® ³»¿¡¼ º¯È¯ÀÚ ÁöÁ¤ÀÇ ÀϺκÐÀÌ ¾Æ´Ñ ´Ù¸¥ ¹®ÀÚµéÀº ÀԷ½ºÆ®¸²³»ÀÇ ¹®ÀÚµé°ú Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÑ´Ù;¸¸¾à ÀÌ·¯ÇÏÁö ¸øÇÏ´Ù¸é, ÀÏÄ¡ ½ÇÆÐ°¡ ÀϾÙ.
scanf ÅÛÇø®Æ® ¹®ÀÚ¿ ³»ÀÇ º¯È¯ÀÚ ÁöÁ¤Àº ÀϹÝÀû Çü½ÄÀ» °®´Â´Ù:
% Ç÷¡±× Æø ÇüÅ º¯È¯ÀÚ
´õ ÀÚ¼¼È÷ »ìÆìº¸¸é,ÀÔ·Â º¯È¯ÀÚ ÁöÁ¤Àº ¸Ç¾ÕÀÇ '%' ¹®ÀÚ¿Í ÈļÓÀÇ ´ÙÀ½ ¹®ÀÚµé·Î ±¸¼ºµÈ´Ù:
o ¿É¼Ç Ç÷¡±× '*'´Â ÀÌ ÁöÁ¤¿¡ ´ëÇÑ °ÍÀ¸·Î ÀÐÈ÷´Â º»¹®À» ¹«½ÃÇϵµ·Ï ÇÑ´Ù.scanf°¡ ÀÌ Ç÷¡±×¸¦ »ç¿ëÇÏ´Â º¯È¯ ÁöÁ¤ÀÚ ¹ß°ßÇÏ¿´À» ¶§´Â ³ª¸ÓÁöÀÇ ´Ù¸¥ º¯È¯ ÁöÁ¤ÀÚ°¡ °¡¸®Å°´Â´ë·Î ÀÔ·ÂÀ» Àоîµé ÀδÙ.±×·¯³ª,ÀÌ ÀÔ·ÂÀº ¹ö·ÁÁö¸ç,Æ÷ÀÎÅÍ Àμö¸¦ »ç¿ëÇÏÁöµµ ¾ÊÀ» »Ó ¾Æ´Ï¶ó,¼º°øÇÑ ÇÒ´çÀ» Çì¾Æ¸®´Â ¼ýÀÚµµ Áõ°¡ÇÏÁö ¾Ê´Â´Ù.
o ¿É¼Ç Ç÷¡±× ¹®ÀÚ 'a'(¹®ÀÚ¿ º¯È¯¿¡¼¸¸ À¯È¿ÇÔ)´Â ¹®ÀÚ¿À» ´ã¾ÆµÎ±â¿¡ ÃæºÐÇÑ ¹öÆÛÀÇ ÇÒ´çÀ»
¿ä±¸ÇÑ´Ù.(À̰ÍÀº GNU È®ÀåÀÌ´Ù.) 7.11.6 [µ¿ÀûÀÎ ¹®ÀÚ¿ ÀÔ·Â],89ÂÊ ÂüÁ¶.
o ÇÊµåÆøÀÇ ÃÖ´ëÄ¡¸¦ ±ÔÁ¤ÇÏ´Â ¿É¼Ç ½ÊÁø¼ö. ÀÔ·Â ½ºÆ®¸²¿¡¼ÀÇ ¹®ÀÚ ÀбⰡ ÁߴܵǴ ½ÃÁ¡Àº ÃÖ´ë Ä¡¿¡ µµ´ÞÇÏ¿´À» ¶§À̰ųª ºÒÀÏÄ¡ ¹®ÀÚ°¡ ¹ß°ßµÇ¾úÀ» ¶§Àε¥,¾î´À ÆíÀÌ ¸ÕÀú ¹ß»ýÇϵçÁö °£¿¡ ±×·¸ °Ô µÈ´Ù.´ëºÎºÐÀÇ º¯È¯ÀÚ´Â ¸Ç¾ÕÀÇ °ø¹é¹®ÀÚµé(¸í½ÃÀûÀ¸·Î Á¦°øµÇÁö ¾ÊÀº ¹®ÀÚµé)À» ¹ö¸®°Ô µÇ¸ç, ÀÌ Ã³·³ ¹ö·ÁÁø ¹®ÀÚµéÀº ÃÖ´ë ÇÊµåÆø¿¡ »êÀÔµÇÁö ¾Ê´Â´Ù.¹®ÀÚ¿ ÀÔ·Â º¯È¯ÀÚµéÀº ÀÔ·ÂÀÇ ³¡ºÎºÐÀ» Ç¥ ½ÃÇϱâ À§ÇÏ¿© ³Î¹®ÀÚ¸¦ ÀúÀåÇÑ´Ù;ÃÖ´ë ÇÊµåÆøÀº ÀÌ Á¾·áÀÚ¸¦ Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù.
o ¿É¼Ç ÇüÅ º¯°æÀÚ ¹®ÀÚ.¿¹¸¦µé¾î,´ç½ÅÀº Àμö°¡ int¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀ̱⠺¸´Ù´Â long int¿¡ ´ëÇÑ Æ÷ ÀÎÅÍÀÓÀ» ÁöÁ¤Çϱâ À§ÇÏ¿© '%d'¿Í °°Àº Á¤¼ö º¯È¯ÀÚ¿¡ ÇüÅ º¯°æÀÚ 'l'À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
o Àû¿ëµÉ º¯È¯ÀÚ¸¦ ÁöÁ¤ÇÏ´Â ¹®ÀÚ.Çã¿ëµÇ´Â Á¤È®ÇÑ ¿É¼Çµé°ú ±×°ÍµéÀÌ ÇØ¼®µÇ´Â ¹æ½ÄÀº º¯È¯ÀÚ ÁöÁ¤ ÀÚµéÀÌ ´Þ¶óÁü¿¡ µû¶ó º¯ÇÑ´Ù.º¯È¯ÀÚ ÁöÁ¤ÀÚµéÀÌ Çã¿ëÇϴ ƯÁ¤ ¿É¼Çµé¿¡ °üÇÑ Á¤º¸¸¦ ¾òÀ¸·Á¸é °³ º°ÀûÀÎ º¯È¯ÀÚ¿¡ ´ëÇÑ ±â¼úÀ» ÂüÁ¶Ç϶ó.
7.11.3 ÀÔ·Â º¯È¯ÀÚ Å×À̺í
´Ù¾çÇÑ º¯È¯ÀÚ ÁöÁ¤À» ¿ä¾àÇØ ³õÀº Å×À̺íÀ» º¸±â·Î ÇÏÀÚ:
'%d'´Â ½ÊÁø¼ö·Î µÈ ¼±ÅÃÀû ºÎÈ£ Á¤¼ö¸¦ ÀÏÄ¡½ÃŲ´Ù. 7.11.4 [¼öÄ¡ ÀÔ·Â º¯È¯ÀÚ],87ÂÊ ÂüÁ¶.
'%i'´Â C¾ð¾î°¡ Á¤¼ö »ó¼ö¸¦ ÁöÁ¤Çϱâ À§ÇØ Á¤ÀÇÇϴ¾ÇÑ Çü½ÄÀÇ ¼±ÅÃÀû ºÎÈ£ Á¤¼öµµ ÀÏÄ¡½ÃŲ ´Ù. 7.11.4 [¼öÄ¡ ÀÔ·Â º¯È¯ÀÚ],87ÂÊ ÂüÁ¶.
'%o'´Â 8Áø¼ö·Î µÈ¹«ºÎÈ£ Á¤¼ö¸¦ ÀÏÄ¡½ÃŲ´Ù. 7.11.4 [¼öÄ¡ ÀÔ·Â º¯È¯ÀÚ],87ÂÊ ÂüÁ¶.
'%u'´Â 10Áø¼ö·Î µÈ ¹«ºÎÈ£ Á¤¼ö¸¦ ÀÏÄ¡½ÃŲ´Ù. 7.11.4 [¼öÄ¡ ÀÔ·Â º¯È¯ÀÚ],87ÂÊ ÂüÁ¶.
'%x','%X'´Â 16Áø Á¤¼ö·Î µÈ ¹«ºÎÈ£ Á¤¼ö¸¦ ÀÏÄ¡½ÃŲ´Ù. 7.11.4 [¼öÄ¡ ÀÔ·Â º¯È¯ÀÚ],87ÂÊ ÂüÁ¶.
`%e', `%f', `%g', `%E', `%G'´Â ¼±ÅÃÀû ºÎÈ£ÀÇ ºÎµ¿¼Ò¼öÁ¡¼ö¸¦ ÀÏÄ¡½ÃŲ´Ù.7.11.4 [¼öÄ¡ ÀÔ·Â º¯È¯ÀÚ],87ÂÊ ÂüÁ¶.
'%s'´Â °ø¹éÀÌ ¾ø´Â ¹®Àڵ鸸À» ´ã°íÀÖ´Â ¹®ÀÚ¿À» ÀÏÄ¡½ÃŲ´Ù.7.11.5 [¹®ÀÚ¿ ÀÔ·Â º¯È¯ÀÚ],88ÂÊ Âü Á¶.
'%['´Â ÁöÁ¤µÈ ¼¼Æ®¿¡ ¼ÓÇÏ´Â ¹®ÀÚµé·Î ÀÌ·ç¾îÁø ¹®ÀÚ¿À» ÀÏÄ¡½ÃŲ´Ù.7.11.5 [¹®ÀÚ¿ ÀÔ·Â º¯È¯ÀÚ], 88ÂÊ ÂüÁ¶.
'%c'´Â Çϳª ÀÌ»óÀÇ ¹®ÀÚµé·Î ÀÌ·ç¾îÁø ¹®ÀÚ¿À» ÀÏÄ¡½ÃŲ´Ù;ÀÐÈ÷´Â ¹®ÀÚÀÇ °¹¼ö´Â º¯È¯ÀÚ¿¡ ´ëÇØ
ÁÖ¾îÁø ÃÖ´ë ÇÊµåÆø¿¡ ÀÇÇØ Á¶ÀýµÈ´Ù. 7.11.5 [¹®ÀÚ¿ ÀÔ·Â º¯È¯ÀÚ],88ÂÊ ÂüÁ¶.
'%p'´Â printf¿¡ ´ëÇÑ Ãâ·Â º¯È¯ÀÚ '%p'¿¡ ÀÇÇØ »ç¿ëµÈ µ¿ÀÏÇÑ ½ÇÇà Á¤ÀÇ Çü½Ä¿¡ ÀÖ´Â Æ÷ÀÎÅÍ °ª À» ÀÏÄ¡½ÃŲ´Ù.7.11.7 [´Ù¸¥ ÀÔ·Â º¯È¯ÀÚ],89 ÂÊ ÂüÁ¶.
'%n' ÀÌ º¯È¯ÀÚ´Â ¾î¶°ÇÑ ¹®ÀÚµµ ÀÐÁö ¾Ê´Â´Ù; À̰ÍÀº À̰ÍÀÌ È£ÃâµÈ ÀÌÈÄ¿¡ ÀÐÇôÁø ¹®ÀÚÀÇ °¹ ¼ö¸¦ ±â·ÏÇÑ´Ù.7.11.7 [¿©Å¸ÀÇ ÀÔ·Â º¯È¯ÀÚ], 89ÂÊ ÂüÁ¶.
'%%' À̰ÍÀº ÀÔ·Â ½ºÆ®¸²³»ÀÇ ¸®ÅÍ·² '%'¹®ÀÚ¸¦ ÀÏÄ¡½ÃŲ´Ù.»óÀÀÇÏ´Â Àμö´Â »ç¿ëµÇÁö ¾Ê´Â´Ù. 7.11.7 [´Ù¸¥ ÀÔ·Â º¯È¯ÀÚ],89ÂÊ ÂüÁ¶.
¸¸¾à º¯È¯ÀÚ ÁöÁ¤ ¹®ÀåÀÌ À¯È¿ÇÏÁö ¾Ê´Ù¸é, ±× ÇàÀ§°¡ Á¤ÀǵÇÁö ¾Ê´Â´Ù.¸¸¾à ÇÒ´çÀ» ¼öÇàÇÏ´Â ÅÛÇø® Æ® ¹®ÀÚ¿ ³»¿¡¼ ¸ðµç º¯È¯ÀÚ ÁöÁ¤ÀÚ¿¡ ´ëÇÑ ÁÖ¼Ò¸¦ °ø±ÞÇϱâ·Î µÇ¾îÀÖ´Â ÇÔ¼ö ÀμöµéÀÌ ÃæºÐÇÏÁö ¾Ê°Å³ª,ÀμöµéÀÌ ¿Ã¹Ù¸¥ ÇüŰ¡ ¾Æ´Ï¶ó¸é, ¿ª½Ã ±× ÇàÀ§°¡ Á¤ÀǵÇÁö ¾Ê´Â´Ù.ÇÑÆí,³²´Â Àμö´Â ´Ü¼øÈ÷ ¹«½ÃµÈ´Ù.
7.11.4 ¼öÄ¡ ÀÔ·Â º¯È¯ÀÚ
ÀÌ Àý¿¡¼´Â ¼ýÀÚ °ªÀ» ÀоîµéÀÌ´Â scanf º¯È¯ÀÚ¿¡ ´ëÇØ ±â¼úÇÑ´Ù.
'%d'´Â 10Áø¼ö¿¡¼ ¼±ÅÃÀûÀÎ ºÎÈ£ Á¤¼ö¸¦ ÀÏÄ¡½ÃŲ´Ù. ÀνĵǴ ¹®ÀåÀº ±âÃÊÀμöÀÇ °ªÀ¸·Î¼ 10À»
°®°íÀÖ´Â strtol ÇÔ¼ö(14.7.[Á¤¼ö ºÐ¼®],213ÂÊ ÂüÁ¶)¿¡ ´ëÇÑ ¹®Àå°ú °°´Ù.
'%i'º¯È¯ÀÚ´Â C¾ð¾î°¡ Á¤¼ö »ó¼ö¿ëÀ¸·Î Á¤ÀÇÇÏ´Â ¾î¶² Çü½Ä¿¡¼³ª ¼±ÅÃÀû ºÎÈ£ Á¤¼ö¸¦ ÀÏÄ¡½ÃŲ´Ù.
ÀνĵǴ ¹®ÀåÀº ±âÃÊÀμöÀÇ °ªÀ¸·Î¼ 0À» °®°íÀÖ´Â strtol ÇÔ¼ö(14.7.[Á¤¼ö ºÐ¼®],213ÂÊ ÂüÁ¶)¿¡ ´ëÇÑ
¹®Àå°ú °°´Ù.(´ç½ÅÀº ÀÌ ¹®Àå»óÀÇ Á¤¼öµéÀ» `%x', `%o'³ª `%d' º¯È¯ÀÚ¸¦ °®´Â '#'Ç÷¡±× ¹®ÀÚ¸¦ »ç ¿ëÇÏ¿© printf·Î ÇÁ¸°Æ®ÇÒ ¼ö ÀÖ´Ù.7.9.4 [Á¤¼ö º¯È¯ÀÚ],72ÂÊ ÂüÁ¶.)
¿¹¸¦µé¾î,'10','0xa'³ª '012'ÁßÀÇ ¾î¶² ¹®ÀÚµéÀ̵ç '%i' º¯È¯ÀÚ°¡ °üÀåÇÏ´Â Á¤¼ö·Î ÀÐÇôÁú ¼ö ÀÖ´Ù. ÀÌµé °¢°¢Àº ½ÊÁø °ª 10À» °®°í¼ ¾î¶² ¼ö¸¦ ÁöÁ¤ÇÑ´Ù.
'%o','%u'¿Í '%x' º¯È¯ÀÚ´Â °¢±â 8Áø,10Áø,16Áø¹«ºÎÈ£ Á¤¼ö¸¦ ÀÏÄ¡½ÃŲ´Ù. ÀνĵǴ ¹®ÀåÀº ±âÃÊÀμöÀÇ °ªÀ¸·Î¼ ÀûÀýÇÑ °ª(8,10À̳ª16)À» °®°íÀÖ´Â strtol ÇÔ¼ö(14.7.[Á¤¼ö ºÐ¼®],213ÂÊ ÂüÁ¶)¿¡ ´ëÇÑ ¹®Àå°ú °°´Ù.
'%X'º¯È¯ÀÚ´Â '%x'º¯È¯ÀÚ¿Í °°´Ù.µÑ´Ù ´ë¹®ÀÚ³ª ¼Ò¹®ÀÚ°¡ ¼ýÀÚ·Î »ç¿ëµÇ´Â °ÍÀ» Çã¿ëÇÑ´Ù. %d³ª %i¿¡ ´ëÇØ »óÀÀÇÏ´Â ÀμöÀÇ ³»Á¤ ÇüÅ´ ´Ù¸¥ Á¤¼ö º¯È¯ÀÚ¸¦ À§ÇØ int *¿Í unsigned int *·Î µÇ¾îÀÖ ´Ù.´ç½ÅÀº ´Ù¸¥ Å©±âÀÇ Á¤¼ö¸¦ ÁöÁ¤ÇÏ·Á¸é ´ÙÀ½ÀÇ ÇüÅ º¯°æÀÚ¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù:
'h'´Â Àμö°¡ short int * ¶Ç´Â unsigned short int * °¡ µÇµµ·Ï ÁöÁ¤ÇÑ´Ù.
'l'´Â Àμö°¡ long int * ¶Ç´Â unsigned long int * °¡ µÇµµ·Ï ÁöÁ¤ÇÑ´Ù.
'l'´Â Àμö°¡ long long int * ¶Ç´Â unsigned long long int * °¡ µÇµµ·Ï ÁöÁ¤ÇÑ´Ù.(long longÇüÅ´ GNU C ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ Áö¿øµÇ´Â È®ÀåÀÌ´Ù.) extra-long Á¤¼ö°¡ Á¦°øµÇÁö ¾Ê´Â üÁ¦¿¡¼´Â À̰ÍÀº long int¿Í °°´Ù.)
'%e', `%f', `%g', `%E'¿Í `%G' ÀÔ·Â º¯È¯ÀÚµéÀº ¸ðµÎ »óÈ£±³È¯ÀÌ °¡´ÉÇÏ´Ù.À̵éÀº ¸ðµÎ strtod ÇÔ¼ö¿¡ ´ëÇÑ µ¿ÀÏÇÑ ¹®Àå¿¡¼ ¼±ÅÃÀû ºÎÈ£ ºÎµ¿¼Ò¼öÁ¡¼ö¸¦ ÀÏÄ¡½ÃŲ´Ù.(14.7.2 [ºÎµ¿¼Ò¼öÁ¡¼ö ºÐ¼®],214ÂÊ ÂüÁ¶.)
ºÎµ¿¼Ò¼öÁ¡ ÀÔ·Â º¯È¯ÀÚ¿¡ ´ëÇØ,³»Á¤ Àμö ÇüÅ´ float *ÀÌ´Ù.(À̰ÍÀº »óÀÀÇÏ´Â Ãâ·Â º¯È¯ÀÚ¿Í´Â ´Ù ¸¥µ¥,Ãâ·Â º¯È¯ÀÚÀÇ ³»Á¤ ÇüÅ´ doubleÀÌ´Ù; printf¿¡ ´ëÇÑ float Àμö´Â ³»Á¤ Àμö 󸮿¡ ÀÇÇØ double·Î º¯È¯µÇÁö¸¸,float * Àμö´Â double *·Î 󸮵ÇÁö ¾Ê´Â´Ù.) ´ç½ÅÀº À̵é ÇüÅ º¯°æÀÚµéÀ» »ç ¿ëÇÏ´Â ´Ù¸¥ Å©±âÀÇ float¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
'l'Àº ÀμöÀÇ ÇüŰ¡ double *°¡ µÇµµ·Ï ÁöÁ¤ÇÑ´Ù.
'L'Àº ÀμöÀÇ ÇüŰ¡ long double *°¡ µÇµµ·Ï ÁöÁ¤ÇÑ´Ù.
7.11.5 ¹®ÀÚ¿ ÀÔ·Â Àüȯµé
ÀÌ ÀýÀº ¹®ÀÚ¿°ú ¹®ÀÚ°ªµéÀ» Àоî¿À±â À§ÇØ scanfÀÔ·Â Àüȯ¿¡ ´ëÇØ ¼³¸íÇϰí ÀÖ´Ù.:
'%s', '%[', °ú '%c'
´ç½Å¿¡°Ô´Â ÀÌ Àüȯµé·ÎºÎÅÍ ÀÔ·ÂÀ» ¾î¶»°Ô ¹ÞÀ» °ÍÀΰ¡¿¡ ´ëÇÑ µÎ °³ÀÇ ¿É¼ÇµéÀÌ ÀÖ´Ù.
o ±×°ÍÀ» ÀúÀåÇϱâ À§ÇÑ ¹öÆÛ¸¦ Á¦°øÇ϶ó. À̰ÍÀº µðÆúÆ®·Î¼. ´ç½ÅÀÌ char *ÇüÀ¸·Î Àμö¸¦ ÁÖ¾î ¾ß ÇÒ °ÍÀÌ´Ù.
ÁÖÀÇ : ưưÇÑ ÇÁ·Î±×·¥À» ¸¸µé·Á¸é, ´ç½ÅÀº, ÀÔ·ÂÀÌ ´ç½ÅÀÌ Á¦°øÇÑ ¹öÆÛÀÇ Å©±â¸¦ ³ÑÁö ¾Ê´ÂÁö( Á¾·á¹®ÀÚ ³ÎÀ» ´õÇØ¼ ) È®ÀÎÇØ¾ß¸¸ ÇÑ´Ù. ÀϹÝÀûÀ¸·Î, À̰ÍÀ» ÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀº ¹öÆÛÅ©±âº¸´Ù Çϳª ÀûÀº ÃÖ´ë ÇÊµå ³Êºñ·Î Á¤ÇÏ´Â °ÍÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ¹öÆÛ¸¦ ¸¸µé·Á¸é, ¿À¹öÇ÷ο츦 ¿¹¹æÇϱâ ÀÌÇØ
ÃÖ´ë ÇÊµå ³Êºñ·Î Á¤Ç϶ó.
o ¹öÆÛÀÇ Å©±â¸¦ Å©°Ô ÇÒ´çÇÏ·Á¸é 'a' Ç÷¡±× ¹®ÀÚ¸¦ ÁöÁ¤Çؼ scanf¿¡°Ô ¿äûÇ϶ó. À̰ÍÀº GNU È® ÀåÀÌ´Ù. ´ç½ÅÀº ¹öÆÛÀÇ ÁÖ¼Ò°¡ ÀúÀåµÇµµ·Ï char ** ŸÀÔÀÇ Àμö¸¦ ÁÖ¾î¾ß ÇÒ °ÍÀÌ´Ù. 7.11.6Àý [Dynamic String Input] 89ÆäÀÌÁö ÂüÁ¶.
'%c' ÀüȯÀº °£´ÜÇÏ´Ù.; Ç×»ó Á¤ÇØÁø(»ç¿ëÀÚ°¡) °³¼öÀÇ ¹®ÀÚ¸¦ Ãâ·ÂÇÑ´Ù. ¸¹Àº ¹®ÀÚµéÀ» ÀÐÀ» ¶§ ¿¡´Â ÃÖ´ë ¼ö¸¦ Á¤ÇØÁà¾ß Çϴµ¥, ¸¸¾à ±× °³¼ö¸¦ Á¤ÇÏÁö ¾ÊÀ¸¸é µðÆúÆ®°ªÀº 1ÀÌ´Ù. ÀÌ ÀüȯÀº ÀÐÀº ÅØ½ºÆ®ÀÇ ³¡¿¡ ³Î ¹®ÀÚ¸¦ µ¡ºÙÀÌÁö ¾Ê´Â´Ù. ¶ÇÇÑ ÀÌ ÀüȯÀº ¾ÕÂÊÀÇ °ø¹é(whitespace) ¹®ÀÚ¸¦ ¹«½Ã ÇÏÁö ¾Ê°í, Á¤È®ÇÏ°Ô ÁÖ¾îÁø n°³ÀÇ ¹®ÀÚ¸¦ Àаí, ¸¸¾à ±×¸¸ÅÀ» ¾òÀ» ¼ö ¾ø´Ù¸é ½ÇÆÐÇÑ´Ù. Ç×»ó '%c'¿Í ÇÔ²² Àоî¿Ã ÃÖ´ë°³¼ö¸¦ ÁÖ¾î¶ó.(Á¤ÇØÁöÁö ¾ÊÀ¸¸é µðÆúÆ®´Â 1ÀÌ´Ù.) ´ç½ÅÀº ÃæºÐÈ÷ ±ä ¹öÆÛ¸¦ ¸¸µé¾î¼ Ç×»ó ¿À¹öÇ÷ο츦 ¹æÁöÇ϶ó.
'%s'ÀüȯÀº ºñ °ø¹é(non_whitespace) ¹®ÀÚµé°ú ´ëÀÀµÈ´Ù. ÀÌ ÀüȯÀº ¾ÕÂÊÀÇ °ø¹é¹®ÀÚ¸¦ °Ç³Ê¶Ù°í, ¹«½ÃÇÏÁö¸¸, °ø¹éÀÌ ¾Æ´Ñ ´Ù¸¥ ¹®ÀÚ¸¦ ÀÐÀº ÈÄ¿¡ ¶Ç ´Ù¸¥ °ø¹é¹®ÀÚ¸¦ ¸¸³ª¸é ±×°÷¿¡¼ ÀÐÀº°É ¸ØÃá ´Ù. ÀÌ ÀüȯÀº ÀÐÀº ÅØ½ºÆ®ÀÇ ³¡¿¡ ³Î ¹®ÀÚ¸¦ ÀúÀåÇÑ´Ù.
¿¹¸¦ µé¾î, ´Ù¸¥ ÀÔ·ÂÀ» ÀÐÀ¸¸é;
hello, world
'%10c' ÀüȯÀÌ ÁÖ¾îÁö¸é ±× °á°ú´Â " hello, wo"°¡ µÇÁö¸¸, °°Àº ÀÔ·ÂÀ» '%10s'·Î ÀÐÀ¸¸é ±× °á°ú´Â "hello,"°¡ µÈ´Ù.
ÁÖÀÇ : ¸¸¾à ´ç½ÅÀÌ '%s'¿Í ÇÔ²² ÇʵåÀÇ ³Êºñ(Àоî¿Ã °³¼ö)¸¦ Á¤ÇÏÁö ¾Ê¾Ò´Ù¸é ÀÐÀ» ¹®ÀÚµéÀÇ °³¼ö ´Â ¿ÀÁ÷ ¹®Àڵ鿡 ³ªÅ¸³ ´ÙÀ½ °ø¹é¹®ÀÚ°¡ ÀÖ´Â °÷À¸·Î Á¦ÇѵȴÙ. À̰ÍÀº °ÅÀÇ È®½ÇÇϰÔ, ¿Ã¹Ù¸£ Áö ¸øÇÑ ÀÔ·ÂÀ¸·Î´Â ´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÌ ¹ö±×·Î ÆÄ±«µÉ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù.
´ç½ÅÀÌ ¼±ÅÃÇÑ Á¦¸Ú´ë·ÎÀÎ ¹®ÀÚ¿ ¼Â¿¡¼ ¹®ÀÚµéÀ» ÀÐÀ¸·Á¸é, '%[' ÀüȯÀ» »ç¿ëÇ϶ó. ´ç½ÅÀº ÀÏ¹Ý ÀûÀΠǥÇö¿¡¼ »ç¿ëµÇ´Â °°Àº ±¸¹®À» »ç¿ëÇÏ¿© '[' ¹®ÀÚ¿Í ']' ¹®ÀÚ »çÀÌ¿¡ ¼ÂÀ» Á¤ÇÑ´Ù. ´ÙÀ½ Ưº° ÇÑ °æ¿ì;
o ¹®ÀÚ ']'´Â ¹®ÀÚ¼ÂÀÇ Ã¹ ¹øÂ° ¹®Àڷμ Á¤ÇØÁú ¼ö ÀÖ´Ù.
o ³¢¿öÁø '-' ¹®ÀÚ( ±×°ÍÀº ¹®ÀÚ¼ÂÀÇ Ã³À½À̰ųª ¸¶Áö¸·ÀÌ ¾Æ´Ñ °Í )´Â ¹®ÀÚµéÀÇ ¹üÀ§¸¦ Á¤Çϴµ¥ »ç¿ëµÈ´Ù.
o ¸¸ÀÏ Ã³À½ '[' ÀÇ °ð¹Ù·Î ´ÙÀ½¿¡ ºÎÈ£ '^'°¡ µû¸£¸é, ÀԷ¹®ÀÚ¿¡¼ '[' °ú ']' ¾È¿¡ ¸®½ºÆ®µÈ ¹®ÀÚµé À» Á¦¿ÜÇÑ ¸ðµç °ÍÀÇ Ãâ·ÂÀ» Çã¿ëÇÑ´Ù.
'%[' ÀüȯÀº óÀ½ÀÇ °ø¹é¹®ÀÚ(whitespace)¸¦ °Ç³Ê¶ÙÁö ¾Ê´Â´Ù. À̰÷¿¡ '%[' Àüȯ°ú ±×°ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö¿¡ ´ëÇÑ ¿¹°¡ ¸î °¡Áö ÀÖ´Ù.
`%25[1234567890]'
25°³ÀÇ ¼ýÀÚ·Î ¹®ÀÚ¿À» ±¸¼ºÇÑ´Ù.
`%25[][]'
25°³ÀÇ ´ë°ýÈ£·Î ¹®ÀÚ¿À» ±¸¼ºÇÑ´Ù.
`%25[^ \f\n\r\t\v]'
25°³ÀÇ ±æÀ̸¦ °¡Áø ¹®ÀÚ¿À» ¸¸µå´Âµ¥, °Å±â¿¡´Â ¾î¶°ÇÑ Ç¥ÁØ °ø¹é¹®ÀÚµéÀÌ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ÀÌ°Í Àº '%s'¿Í´Â ¾à°£ ´Ù¸¥µ¥ ±× ´Ù¸¥ Á¡À̶õ ¸¸¾à ÀÔ·ÂÀÌ °ø¹é¹®ÀÚ·Î ½ÃÀ۵ȴٸé '%s'´Â °£´ÜÈ÷ ¾ÕÂÊ ÀÇ °ø¹é¹®ÀÚ¸¦ ¹«½ÃÇØ¹ö¸®Áö¸¸ '%['´Â ´ëÀÀ¿¡ ½ÇÆÐ¸¦ ÇÑ´Ù.
`%25[a-z]'
25°³ÀÇ ¼Ò¹®ÀÚ·Î ±¸¼ºµÈ ¹®ÀÚ¿À» ¸¸µç´Ù.
ÇÑ ¹ø ´õ ±â¾ï : '%s'¿Í '%[' ÀüȯÀº ÃÖ´ë ³Êºñ¸¦ Á¤ÇÏÁö ¾Ê°Å³ª, 'a'Ç÷¡±×¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é À§ ÇèÇÏ´Ù. ¿Ö³ÄÇϸé ÀÔ·ÂÀÌ ³Ê¹« ±æ¾î¼ ´ç½ÅÀÌ Á¦°øÇÑ ¹öÆÛ°¡ ¿À¹öÇ÷ο츦 ¹ß»ý½Ãų ¼ö Àֱ⠶§¹® ÀÌ´Ù. ´ç½ÅÀÌ Á¦°øÇÑ ¹öÆÛ°¡ ÁÖ¾îÁø ÀԷº¸´Ù ±æ´Ù¸é ¾Æ¹«·± ¹®Á¦°¡ ¾ø´Ù. Àß ¸¸µé¾îÁø ÇÁ·Î±×·¥Àº À¯¿ëÇÏÁö ¸øÇÑ ÀԷ¿¡ ÀÌÇØÇÒ ¼ö ÀÖ´Â ¿¡·¯¸Þ½ÃÁö¸¦ ³»¼, ÇÁ·Î±×·¥ÀÌ ¹®Á¦¸¦ ÀÏÀ¸Å°Áö ¾Ê°Ô ÇÑ´Ù.
7.11.6 µ¿ÀûÀ¸·Î ÇÒ´çÇÏ´Â ¹®ÀÚ¿ Àüȯµé.
GNU È®ÀåÀº ÃÖ´ë Å©±â°¡ ¾Æ´Ñ °ÍÀ¸·Îµµ ¹®ÀÚ¿À» ¾ÈÀüÇÏ°Ô ÀÐ´Â°É Çã¿ëÇÑ´Ù. À̰ÍÀ» »ç¿ëÇÏ¸é ´ç ½ÅÀº ¹öÆÛ¸¦ Á¦°øÇÏÁö ¾Ê¾Æµµ µÇ´Âµ¥; ´ë½Å¿¡ scanf´Â ´ç½ÅÀÌ ÁØ ÁÖ¼Ò¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇØ Ãæ ºÐÇÑ Å©±âÀÇ ¹öÆÛ¸¦ ÇÒ´çÇÑ´Ù. À̰ÍÀ» »ç¿ëÇÏ·Á¸é, Ç÷¡±× ¹®ÀÚ·Î 'a'¸¦ ½á¼, '%as' ³ª '%a[0-9a-z] ·Î ¾´´Ù.
ÀÔ·ÂÀ» ÀúÀåÇϱâ À§ÇØ ´ç½ÅÀÌ Á¦°øÇÑ Æ÷ÀÎÅÍ Àμö´Â char ** ÇüÀ» °¡Áø´Ù. scanfÇÔ¼ö´Â ¹öÆÛ¸¦ ÇÒ´ç ÇÏ°í ±× Æ÷ÀÎÅÍ Àμö¿¡ ¿öµå(word)·Î, ±× ÇÒ´çµÈ ¿µ¿ªÀÇ ÁÖ¼Ò¸¦ ÀúÀåÇÑ´Ù. ´õ ÀÌ»ó ±×°ÍÀÌ ÇÊ¿äÄ¡ ¾ÊÀ¸¸é free·Î ¹öÆÛ¸¦ ÇØÁ¦ÇؾßÇÑ´Ù.
¿©±â¿¡ 'varilble = value' ÇüÅÂÀÇ "variable assignment"¸¦ Àбâ À§ÇØ 'a'Ç÷¡±×¿Í ÇÔ²² '%['º¯È¯Áö Á¤À» »ç¿ëÇÑ ¿¹°¡ ÀÖ´Ù.
{
char *variable, *value;
if (2 > scanf ("%a[a-zA-Z0-9] = %a[^\n]\n", &variable, &value))
{
invalid_input_error ();
return 0;
}
. . .
}
7.11.7 ´Ù¸¥ ÀÔ·Â Àüȯµé.
ÀÌ Àý¿¡´Â Àâ´ÙÇÑ ÀÔ·Â Àüȯµé¿¡ ´ëÇØ ¼³¸íÇϰí ÀÖ´Ù.
'%p'ÀüȯÀº Æ÷ÀÎÅͰªÀ» Àбâ À§ÇØ »ç¿ëµÈ´Ù. printf¸¦ À§ÇØ Ãâ·ÂÀüȯÀ¸·Î »ç¿ëµÇ´Â '%p'¿Í µ¿ÀÏÇÑ ±¸¹®À¸·Î Àνĵǰí( 7.9.6 [Other Output Conversions] 75ÆäÀÌÁö ÂüÁ¶); ¹Þ¾Æµé¿©Áø '%x' ÀüȯÀº ´Ü Áö 16Áø¼ö¸¦ À§ÇÑ ÀÔ·ÂÀÌ´Ù. ´ëÀÀÇÏ´Â Àμö·Î void ** ÇüÀÌ ÁÖ¾îÁ®¾ß Çϰí; ±×°ÍÀº Æ÷ÀÎÅ͸¦ ÀúÀåÇÏ ±â À§ÇÑ Àå¼ÒÀÇ ÁÖ¼ÒÀÌ´Ù. ±× °á°úÀÎ Æ÷ÀÎÅÍ °ªÀº ¸¸¾à ±× ¾È¿¡ Àд µ¿ÀÏÇÑ ÇÁ·Î±×·¥ ½ÇÇà (execution)µ¿¾È¿¡ ¿ø·¡µ¥·Î ½áÁöÁö ¾Ê´Â´Ù¸é ±×°ÍÀÌ À¯¿ëÇÑ °ÍÀÎÁö´Â º¸ÀåÇÒ ¼ö ¾ø´Ù.
'%n'ÀüȯÀº ÀÌ È£Ãâ¿¡ ÀÇÇØ ÀÐÇôÁø ¹®ÀÚµéÀÇ ¼ö¸¦ ¸¸µç´Ù. ±× ´ëÀÀÀμö´Â int *°¡ µÇ¾îÁø´Ù. ÀÌ ÀüȯÀº printf¿¡¼ »ç¿ëÇÏ´Â '%n'Àüȯ°ú µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î ÀÛµ¿ÇÑ´Ù; 7.9.6[Other Output Conversions] 75ÆäÀÌÁö¿¡¼ ¿¹Á¦¸¦ ÂüÁ¶Ç϶ó.
'%n'ÀüȯÀº ¹®ÀÚÀÇ ÀÛ¿ë(¿ªÁÖ: ÀÔ·ÂÀ̳ª Ãâ·Âµî ¾î¶² ¹®ÀÚ¿¿¡ °¡ÇØÁø ÀÛ¿ëÀÎ µí)ÀÇ ¼º°ø¿©ºÎ¸¦ °á Á¤Çϰųª ÀºÆóµÈ Àμö·ÎÀÇ ÀüȯÀ» À§ÇÑ ¸ÞÄ«´ÏÁòÀÌ´Ù. ¸¸¾à '%n'¿¡ ´ëÀÀ½ÇÆÐ°¡ µû¸£¸é '%n'ÀÇ Áø Çà Àü¿¡ scanf°¡ ¸®ÅÏÇÑ ±×°÷¿¡´Â ¾Æ¹« °ªµµ ÀúÀåµÇÁö ¾ÊÀº °ÍÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ scanf¸¦ È£ÃâÇϱâ Àü¿¡ ±× Àμö¿¡ -1À» ÀúÀåÇϸé scanf´Â '%n'¿¡ µµ´ÞµÇ±â Àü¿¡ ¿¡·¯ÀÇ ¹ß»ýÀ» ÁöÀûÇÑ´Ù.
¸¶Áö¸·À¸·Î, '%%' ÀüȯÀº Àμö¸¦ »ç¿ëÇÏÁö ¾Ê°í ÀÔ·Â ½ºÆ®¸²¿¡ '%'¹®ÀÚ¸¦ ³Ö´Â´Ù. ÀÌ ÀüȯÀº ¾î´À Ç÷¡±×, ÇʵåÀÇ ³Êºñ³ª ŸÀÔ¼öÁ¤ÀÚµç, ¾î¶² °Íµµ Çã¿ëÇÏÁö ¾Ê´Â´Ù.
7.11.8 Çü½ÄÈµÈ ÀÔ·Â ÇÔ¼öµé.
À̰÷¿¡¼´Â Çü½ÄÈµÈ ÀÔ·ÂÀ» ¼öÇàÇÏ´Â ÇÔ¼öµéÀ» ¼³¸íÇϰí ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀ» À§ÇÑ ÇÁ·ÎÅäŸÀÔÀº Çì ´õÆÄÀÏ 'stdio.h'¿¡ ÀÖ´Ù.
ÇÔ¼ö : int scanf (const char *template, . . .)
scanfÇÔ¼ö´Â Ç¥ÁØ ½ºÆ®¸²¿¡¼ ÅÛÇø´ ¹®ÀÚ¿ÀÇ Á¦¾î¿¡ µû¶ó¼ Çü½ÄÈµÈ ÀÔ·ÂÀ» Àд´Ù. ÀÓÀÇÀÇ ÀÎ ¼ö´Â(optional arguments) ¸®ÅÏµÈ °ªÀ» ¹Þ±âÀ§ÇÑ Àå¼ÒÀÇ Æ÷ÀÎÅÍÀÌ´Ù. ±× ¸®ÅϰªÀº º¸Åë ÀúÀåµÈ ÀÔ·Â ÇʵåÀÇ ¼ö¸¦ ¸®ÅÏÇÑ´Ù. ¸¸ÀÏ ¾î´À °Íµµ ÀÐÇôÁö±â Àü¿¡ ÆÄÀÏÀÇ ³¡ÀÎ »óȲÀÌ °ËÃâµÇ¸é,( ÅÛÇø®Æ®¿¡ °ø ¹é¹®ÀÚ¿Í ´Ù¸¥ ¹®ÀÚµéÀ» Àд °ÍÀ» Æ÷ÇÔÇÏ¿©), ±×·¯¸é EOF°¡ ¸®ÅϵȴÙ.
ÇÔ¼ö : int fscanf (FILE *stream, const char *template, . . .)
ÀÌ ÇÔ¼ö´Â Ç¥ÁØ ½ºÆ®¸²ÀÌ ¾Æ´Ñ ½ºÆ®¸²¿¡¼ Àоî¿À´Â°É Á¦¿ÜÇϸé scanf¿Í °°´Ù.
ÇÔ¼ö : int sscanf (const char *s, cost char *template, . . .)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸²´ë½Å¿¡ ³Î Á¾·á¹®ÀÚ¸¦ °¡Áø ¹®ÀÚ¿·ÎºÎÅÍ ¹®ÀÚµéÀ» ÀÐ´Â´Ù´Â°É Á¦¿ÜÇϰí´Â scanf¿Í °°´Ù. ½ºÆ®¸µÀÇ ³¡¿¡ µµ´ÞÇÏ¸é ÆÄÀÏÀÇ ³¡ÀÎ »óȲó·³ Ãë±ÞÇÑ´Ù. ÀÌ ÇÔ¼öÀÇ µ¿ÀÛÀÌ ¸¸ÀÏ ¿À¹ö·¦ÇÒ objects¿Í ÀúÀåÇÒ Àå¼Ò¸¦ ÃëÇÏ´Â °Í »çÀÌ¿¡ Á¤ÀǵÇÁö ¾Ê´Â´Ù¸é, ¸¸ÀÏ s°¡ ½ºÆ®¸µÀ» ¹Þ±âÀ§ÇÑ Àμö·Î ¼ ÁÖ¾îÁø´Ù¸é '%s'ÀÇ Á¦¾îÇÏ¿¡ ¹®ÀÚµéÀ» Àд´Ù.
7.11.9 º¯¼ö ÀμöµéÀÇ ÀÔ·Â ÇÔ¼öµé.
vscanf¿Í ±×¿Í À¯»çÇÑ ÇÔ¼öµéÀº ´ç½Å ÀڽŸ¸ÀÇ ´Ù¾çÇÑ scanf¿Í °°Àº ÇÔ¼ö¸¦ Á¤ÀÇÇÒ¼ö ÀÖµµ·Ï ÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. ÀÌ ÇÔ¼öµéÀº Ãâ·ÂÇÔ¼öµéÀÎ vprintf ½Ã¸®Áî¿Í À¯»çÇÏ´Ù. 7.9.9 [Variable Argumints Output] 77ÆäÀÌÁö¸¦ ÂüÁ¶ÇÏ¿© ±×µéÀº ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ Áß¿äÇÑ Á¤º¸¸¦ º¸¶ó.
ȣȯ¼º ³ëÆ® : ÀÌ Àý¿¡ ¸®½ºÆ®µÈ ÇÔ¼öµéÀº GNUÈ®ÀåÀÌ´Ù.
ÇÔ¼ö : int vscanf (const char *template, va_list ap)
ÀÌ ÇÔ¼ö´Â Á÷Á¢ÀûÀ¸·Î ÀμöµéÀÇ °³¼ö¸¦ °¡Áø º¯¼ö¸¦ ÃëÇÏ´Â ´ë½Å¿¡ Àμö ¸®½ºÆ®·Î va_list ÇüÀÇ Æ÷ÀÎ ÅÍ ap¸¦ ÃëÇÏ´Â°É Á¦¿ÜÇϰí´Â scanf¿Í À¯»çÇÏ´Ù.
ÇÔ¼ö : int vfscanf (FILE *stream, const char *template, va_list ap)
ÀÌ ÇÔ¼ö´Â Á÷Á¢ÀûÀ¸·Î Àμö ¸®½ºÆ®¸¦ º¯¼ö·Î ÃëÇϸé fscanf¿Í µ¿µîÇÏ´Ù.
ÇÔ¼ö : int vsscnaf (const char *s, const char *template, va)list ap)
ÀÌ ÇÔ¼ö´Â Á÷Á¢ÀûÀ¸·Î Àμö ¸®½ºÆ®¸¦ º¯¼ö·Î ÃëÇϸé sscanf¿Í µ¿µîÇÏ´Ù.
7.12 ºí·Ï ÀÔ·Â/Ãâ·Â
ÀÌ ÀýÀº µ¥ÀÌÅÍ ºí·ÏÀÇ ÀԷ°ú Ãâ·Â µ¿ÀÛÀ» ¾î¶»°Ô ÇÏ´ÂÁö¿¡ ´ëÇØ ¼³¸íÇϰí ÀÖ´Ù. ´ç½ÅÀº ¹®ÀÚµéÀÌ ³ª ¶óÀÎ ´ë½Å¿¡ Á¤ÇØÁø Å©±âÀÇ ºí·Ï¿¡ ÅØ½ºÆ®¸¦ ÀÐ°í ¾²´Â °ÍÀº ¹°·Ð, ¹ÙÀ̳ʸ® µ¥ÀÌÅ͸¦ ÀÐ°í ¾µ ¼ö ÀÖ´Â ±×·¯ÇÑ ÇÔ¼öµéÀ» »ç¿ëÇÒ¼ö ÀÖ´Ù.
¹ÙÀ̳ʸ® ÆÄÀϵéÀº ½ÇÇàµÇ°íÀÖ´Â ÇÁ·Î±×·¥ ¾È¿¡¼ µ¥ÀÌÅ͸¦ ³ªÅ¸³»±â À§ÇØ »ç¿ëµÇ¾îÁø°Í°ú µ¿ÀÏÇÑ Çü½ÄÀ¸·Î µ¥ÀÌÅÍÀÇ ºí·ÏµéÀ» ÀÐ°í ¾²±âÀ§ÇØ »ç¿ëµÈ´Ù. ´Ù¸¥ ¸»·Î ÇÏÀÚ¸é, ´ÜÁö ¹®ÀÚ³ª ½ºÆ®¸µ ¿Àºê Á§Æ®°¡ ¾Æ´Ñ ,¸Þ¸ð¸®ÀÇ ºí·ÏÀ» ¹ÙÀ̳ʸ® ÆÄÀÏ·Î ¾µ¼öµµ ÀÖ°í, µ¿ÀÏÇÑ ÇÁ·Î±×·¥¿¡ ÀÇÇØ ´Ù½Ã ÀǹÌÀÖ°Ô ÀÐÇôÁú¼öµµ ÀÖ´Ù.
¹ÙÀ̳ʸ® ÆÄÀÏÀÇ Çü½ÄÀ¸·Î µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â °ÍÀº Çü½ÄÈµÈ ÀÔ/Ãâ·Â ÇÔ¼öµé »ç¿ëÇÏ´Â °Í º¸´Ù Á¾Á¾ »ó´çÈ÷ ´õ È¿°úÀûÀÌ´Ù. ¶ÇÇÑ ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼ýÀڵ鿡 ¹ÙÀ̳ʸ® Çü½ÄÀÇ »ç¿ëÀº º¯È¯ÀÛ¾÷¿¡¼ Á¤¹Ðµµ ¸¦(precision) ÀÒÀ» °¡´É¼ºÀ» ÇÇÇÏ°Ô ÇÑ´Ù. ÇÏÁö¸¸ ÇÑÆíÀ¸·Î, ¹ÙÀ̳ʸ® ÆÄÀϵéÀº ¸¹Àº ±âº»ÀûÀÎ ÆÄÀÏ À¯Æ¿¸®Æ¼( ÅØ½ºÆ® ¿¡µðÅÍ °°Àº )µéÀ» »ç¿ëÇÏ¿© ½±°Ô ½ÃÇèÇϰųª ¼öÁ¤ÇÒ¼ö ¾ø°í, ´Ù¸¥ Á¾·ùÀÇ ÄÄÇ»ÅÍ µéÀ̳ª ´Ù¸¥ ¾ð¾î¿¡ Àû¿ë½ÃŰ´Â °ÍÀº ȣȯ¼ºÀÌ ¾ø´Ù.
ÀÌ ÇÔ¼öµéÀ» 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : size_t fread (void *data, size_t size, size_t count, FILE *stream)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸² streamÀ¸·ÎºÎÅÍ ¹è¿ data¾ÈÀ¸·Î sizeÀÇ Å©±âÀÇ count°³ÀÇ objects¸¦ Àд´Ù. ÀÌ °ÍÀº ½ÇÁ¦·Î ÀÐÇôÁø objectsÀÇ °³¼ö¸¦ ¸®ÅÏÇϰí, ¸¸¾à ¿¡·¯°¡ ¹ß»ýÇϰųª, ÆÄÀÏÀÇ ³¡¿¡ µµ´ÞÇϸé countº¸´Ù´Â ÀûÀº ¼ö¸¦ ¸®ÅÏÇÒ °ÍÀÌ´Ù. ¸¸¾à size³ª count°¡ ¿µÀÌ¸é ±× ÇÔ¼öÀÇ ¸®ÅϰªÀº ¿µÀ̵ȴ٠(¾Æ¹«°Íµµ ÀÐÁö ¾Ê¾Ò´Ù) ¸¸¾à objectÀÇ Áß°£¿¡ ÆÄÀÏÀÇ ³¡ÀÌ ÀÖ´Ù¸é fread´Â ¿ÏÀüÇÑ objectsÀÇ ¼ö¸¦ ¸® ÅÏÇϰí, ³ª¸ÓÁö object´Â ¹ö¸°´Ù. ±×·¯¹Ç·Î, ±× ½ºÆ®¸²¿¡´Â ½ÇÁ¦ ÆÄÀÏÀÇ ³¡ÀÌ ³²´Â´Ù.
ÇÔ¼ö: size_t fwrite (const void *data, size_t size, size_t count, FILE *stream)
ÀÌ ÇÔ¼ö´Â ¹è¿ data¿¡¼ ½ºÆ®¸² streamÀ¸·Î sizeÅ©±âÀÇ count°³ÀÇ objects¸¦ ÀúÀåÇÑ´Ù. ¸®ÅϰªÀº È£ÃâÀÌ ¼º°øÇϸé ÀϹÝÀûÀ¸·Î ¾²´Âµ¥ ¼º°øÇÑ count¼öÀÌ´Ù. ´Ù¸¥°ªÀÌ ¸®ÅÏµÇ¸é ¿¡·¯³ª ½ÇÇàÀÌ ½ÇÆÐÇÏ ¿´À½À» ÀǹÌÇÑ´Ù.
7.13 ÆÄÀÏÀÇ ³¡°ú ¿¡·¯µé.
ÀÌÀå¿¡ ¼³¸íµÈ ¸¹Àº ÇÔ¼öµéÀº ¿ÀÆÛ·¹À̼ÇÀÇ ºÒ¿ÏÀüÇÑ ¼öÇàÀ» ÁöÀûÇϱâ À§ÇØ ¸¶Å©·Î EOFÀÇ °ªÀ» ¸® ÅÏÇÏ´Â ÇÔ¼öÀÌ´Ù. ÆÄÀÏÀÇ ³¡À̳ª ÀÓÀÇÀÇ ¿¡·¯¸¦ ÁöÀûÇϴµ¥ »ç¿ëµÇ°í, ±×°ÍÀº Á¾Á¾ ¸í¹éÇÏ°Ô ÆÄÀÏÀÇ ³¡À» üũÇϱâÀ§ÇØ feof, ±×¸®°í ¿¡·¯µéÀº üũÇϴµ¥ ferrorÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÀÌ ÇÔ¼öµéÀº ½º Æ®¸² ¿ÀºêÁ§Æ®ÀÇ ³»ºÎÀû »óȲÀÇ ºÎºÐÀÎ Áö½ÃÀÚ, ½ºÆ®¸²¿¡¼ ¾Õ¿¡¼ ÇàÇØÁø ÀÔ/Ãâ·Â ¿ÀÆÛ·¹À̼ǿ¡ ÀÇ ÇØ °ËÃâµÈ ÀûÀýÇÑ »óȲÀ» °¡Áø Áö½ÃÀÚ ¼¼Æ®¸¦ üũÇÑ´Ù.
ÀÌ ½Éº¼µéÀº Çì´õÆÄÀÏ 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
¸¶Å©·Î int EOF
ÀÌ ¸¶Å©·Î´Â ÆÄÀÏÀÇ ³¡ÀÎ »óȲÀ» ÁöÀûÇϰųª ¾î¶² ´Ù¸¥ ¿¡·¯ »óȲ¿¡¼ »ç¿ëµÈ ÇÔ¼öµé¿¡ ÀÇÇØ ¸®ÅÏ µÇ´Â Á¤¼ö°ªÀÌ´Ù. GNU¶óÀ̺귯¸®¿¡¼ EOF´Â -1À̰í, ´Ù¸¥ ¶óÀ̺귯¸®µé¿¡¼´Â ¾î¶² ´Ù¸¥ À½ÀÇ °ª À» °®À» °ÍÀÌ´Ù.
ÇÔ¼ö : void clearerr (FILE *stream)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸² streamÀ» À§ÇØ ÆÄÀÏÀÇ ³¡°ú ¿¡·¯ Áö½ÃÀÚ¸¦ Ŭ¸®¾îÇÑ´Ù. ÀÌ ÆÄÀÏ »óÅÂ(positioning) ÇÔ¼öµéÀº( 7.15Àý [File Positiong] 93ÆäÀÌÁö ÂüÁ¶) ¶ÇÇÑ ½ºÆ®¸²ÀÇ ÆÄÀϳ¡ Áö½ÃÀÚ¸¦ Ŭ¸®¾îÇÑ´Ù.
ÇÔ¼ö : int feof (FILE *stream)
ÀÌ feofÇÔ¼ö´Â ½ºÆ®¸²¿¡¼ ¸¸ÀÏ ´ÜÁö ÆÄÀÏÀÇ ³¡ Áö½ÃÀÚÀÌ¸é ¿µÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÑ´Ù.
ÇÔ¼ö : int ferror (FILE *stream)
ÀÌ ferror ÇÔ¼ö´Â ½ºÆ®¸²¿¡¼ ¿¡·¯Áö½ÃÀÚ¸¦ ¸¸³ª¸é ¿µÀÌ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÏ¿© ½ºÆ®¸²¿¡¼ ¾ÕÀÇ ¿ÀÆÛ·¹ À̼ǿ¡¼ ¹ß»ýÇÑ ¿¡·¯¸¦ ÁöÀûÇÑ´Ù.
½ºÆ®¸²°ú ¿¬°üÇÏ¿© ¿¡·¯ Áö½ÃÀÚ¸¦ ¼ÂÆÃÇϴ°ͻӸ¸ ¾Æ´Ï¶ó, ÆÄÀÏ ±â¼úÀÚ¿¡ ¼öÇàÇÑ ¿¬°üµÈ Àú¼öÁØ ÇÔ ¼öµé°ú °°Àº ¹æ¹ýÀ¸·Î ¿¡·¯¹øÈ£(errno) ¶ÇÇÑ ¼¼Æ® ÇÒ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î. fputc, printf, ±×¸®°í fflush µî ½ºÆ®¸²ÀÇ Ãâ·ÂÀ» ¼öÇàÇÏ´Â ¸ðµç ÇÔ¼öµé¿¡¼ Ãâ·ÂÀ» ¼öÇàÇÏ´Â µ¿¾È¿¡ ¿¡·¯ÀÇ »óȲ¿¡ µû¶ó Á¤ÀǵÈ
¿¡·¯¹øÈ£´Â ÀÌ ÇÔ¼öµé¿¡°Ô Àǹ̰¡ ÀÖ´Ù. ÀÌ Àú¼öÁØ ÀÔ/Ãâ·Â ÇÔ¼ö ±â¼úÀÚ¿¡ ´ëÇÑ Á¤º¸´Â 8Àå [Low-Level I/O] 103ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó.
==> Áö±Ý±îÁö systemÀ» "üÁ¦"·Î ¹ø¿ªÇÏ¿´À¸³ª, operating systemÀº "¿î¿µÃ¼Á¦"·Î ¹ø¿ªÇϵÇ, ´Ù¸¥ systemÀº "½Ã½ºÅÛ"À¸·Î ¹ø¿ªÇÔ. ¿Ö³ÄÇϸé,ÀÌ¹Ì ¾÷°è¿¡¼ "½Ã½ºÅÛ"À̶ó°í ±×³É ºÎ¸£´Â °æ¿ì°¡ ¸¹±â ¶§ ¹®ÀÓ.
7.14 ÅØ½ºÆ®¿Í ¹ÙÀ̳ʸ® ½ºÆ®¸².
GUU ½Ã½ºÅÛ°ú ´Ù¸¥ POSIX ȣȯ ¿î¿µÃ¼Á¦µéÀº ¹®ÀÚµéÀÇ ¿À» °°Àº Çü½ÄÀ¸·Î ÇØ¼ ¸ðµç ÆÄÀÏÀ» ±¸ ¼ºÇÑ´Ù. ±×·¸Áö¸¸, ´Ù¸¥ ½Ã½ºÅ۵鿡¼´Â ÅØ½ºÆ® ÆÄÀϰú, ¹ÙÀ̳ʸ® ÆÄÀÏ»çÀÌ¿¡ ´Ù¸¥Á¡ÀÌ ÀÖ°í, ANSI CÀÇ ÀԷ°ú Ãâ·Â µµ±¸µéÀº ÀÌ Â÷À̸¦ Áö¿øÇÑ´Ù. ÀÌ ÀýÀº ´Ù¸¥ ½Ã½ºÅÛµé°ú ȣȯµÅµµ·Ï ¾î¶»°Ô ÇÁ·Î ±×·¥À» ¸¸µé °ÍÀΰ¡¿¡ ´ëÇÑ Á¤º¸°¡ ÀÖ´Ù.
½ºÆ®¸²À» °³¹æÇÒ ¶§, ´ç½ÅÀº ÅØ½ºÆ® ½ºÆ®¸²ÀÎÁö ¹ÙÀ̳ʸ® ½ºÆ®¸²ÀÎÁö¸¦ Á¤ÇÒ ¼ö ÀÖ´Ù. ´ç½ÅÀÌ ¹ÙÀÌ ³Ê¸® ½ºÆ®¸²À» ¿øÇϸé, fopen ÀÇ opentypeÀμö¿¡ 'b'¶ó°í ÁöÁ¤ÇÏ¸é ¿øÇÏ´Â°É ¾òÀ»¼ö ÀÖ´Ù; 7.3Àý [Opening Streams]64ÆäÀÌÁö ÂüÁ¶. 'b' ¿É¼ÇÀÌ ¾øÀÌ »ç¿ëÇϸé ÅØ½ºÆ® ½ºÆ®¸²À¸·Î ÆÄÀÏÀÌ °³¹æµÈ´Ù.
ÅØ½ºÆ®¿Í ¹ÙÀ̳ʸ® ½ºÆ®¸²ÀÇ ¿©·¯ °¡Áö Â÷ÀÌ.
o ÅØ½ºÆ® ½ºÆ®¸²¿¡¼ Àоî¿Â µ¥ÀÌÅÍ´Â »õÁÙ('\n')¹®ÀÚ¿¡ ÀÇÇØ Á¾·áµÈ ¶óÀεé·Î ±¸ºÐµÇÁö¸¸, ¹ÙÀ̳ʸ® ½ºÆ®¸²Àº °£´ÜÈ÷ ¹®ÀÚµéÀÇ ±ä ¿¬¼ÓÀÌ´Ù. ¾î¶² ½Ã½ºÅÛ¿¡¼ ÅØ½ºÆ®´Â 254°³ÀÇ ¹®ÀÚº¸´Ù ±ä ¹®ÀÚ¸¦ Ãë ±ÞÇÒ ¼ö°¡ ¾ø´Ù.(»õÁÙ ¹®ÀÚ¸¦ Æ÷ÇÔÇØ¼ )
o ¾î¶² ½Ã½ºÅÛ¿¡¼, ÅØ½ºÆ® ÆÄÀϵéÀº ¿ÀÁ÷ ÇÁ¸°Æ® °¡´ÉÇÑ ¹®ÀÚ¿Í, ¼öÆòÅÇ, »õÁÙ±âÈ£ µîÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ°í, ±× ¿Ü ´Ù¸¥ ¹®ÀÚµéÀº Áö¿øÇÏÁö ¾Ê´Â´Ù. ÇÏÁö¸¸ ¹ÙÀ̳ʸ® ½ºÆ®¸²µéÀº ¾î¶² ¹®ÀÚ °ªÀ̶ó°í Ãë±Þ ÇÒ ¼ö ÀÖ´Ù.
o ÅØ½ºÆ® ½ºÆ®¸²¿¡¼ »õÁÙ±âÈ£ ¾Õ¿¡ ¾º¿©Áø °ø¹é¹®ÀÚ´Â ´Ù½Ã ±× ÆÄÀÏÀ» ÀÐÀ» ¶§´Â »ç¶óÁúÁöµµ ¸ð ¸¥´Ù.
o ´õ ÀϹÝÀûÀ¸·Î, ½ÇÁ¦ ÆÄÀÏ ¾ÈÀÇ ¹®ÀÚµé°ú, ÅØ½ºÆ® ½ºÆ®¸²¿¡¼ Àаųª, ¾´ ¹®ÀÚµé »çÀÌ¿¡ ÀÏ´ëÀÏ·Î ´ëÀÀµÇ¾îÁú Çʿ䰡 ¾ø´Ù.
¹ÙÀ̳ʸ® ½ºÆ®¸²ÀÌ ÅØ½ºÆ® ½ºÆ®¸²º¸´Ù Ç×»ó ´õ À¯´ÉÇϰí, ´õ ¿¹Ãø °¡´ÉÇѵ¥µµ ºÒ±¸Çϰí, ¹«½¼ ¸ñÀûÀ¸ ·Î ÅØ½ºÆ® ½ºÆ®¸²ÀÌ Á¦°øµÇ´ÂÁö ´ç½ÅÀº ÀǾÆÇØÇÒ °ÍÀÌ´Ù. ¹ÙÀ̳ʸ® ½ºÆ®¸²ÀÇ »ç¿ëÀº ¿Ö Ç×»ó °£´ÜÇÏ Áö ¾ÊÀº°¡? À̰Ϳ¡ ´ëÇÑ ´ë´äÀº ÅØ½ºÆ®¿Í ¹ÙÀ̳ʸ® ÆÄÀÏÀÇ Çü½ÄÀ» ´Ù¸£°Ô »ç¿ëÇϰí, ÅØ½ºÆ®¸¦ ±â¹Ý À¸·ÎÇÑ ÇÁ·Î±×·¥À¸·Î ÀÛ¾÷À» ÇÏ´Â "º¸ÅëÀÇ ÅØ½ºÆ® ÆÄÀÏ"À» Àаųª ¾²´Â À¯ÀÏÇÑ ¹æ¹ýÀÌ ÅØ½ºÆ® ½ºÆ® ¸²À» ÅëÇØ¼¸¸ °¡´ÉÇÑ ±×·± ¿î¿µÃ¼Á¦µé ¶§¹®ÀÌ´Ù.
GNU ¶óÀ̺귯¸®¿Í ¸ðµç POSIX ½Ã½ºÅ۵鿡¼´Â ÅØ½ºÆ® ½ºÆ®¸²°ú ¹ÙÀ̳ʸ® ½ºÆ®¸² »çÀÌ¿¡ ¾Æ¹«·± Â÷ÀÌÁ¡ÀÌ ¾ø´Ù. ´ç½ÅÀÌ ½ºÆ®¸²À» °³¹æÇÒ¶§, ¹ÙÀ̳ʸ® ½ºÆ®¸²À¸·Î ¿äûÇÏ´Â°É ½Å°æÀ» ¾²Áö ¾Ê¾Æµµ ¹Ù À̳ʸ® ½ºÆ®¸²À» ¾òÀ»¼ö ÀÖ´Ù. ÀÌ ½ºÆ®¸²Àº ÅØ½ºÆ® ½ºÆ®¸²ÀÌ °¡Áø ±×·± Á¦ÇѾøÀÌ ¾î¶² ³»¿ëÀÌ¶óµµ Ãë±ÞÇÒ ¼ö ÀÖ´Ù.
7.15 ÆÄÀÏ À§Ä¡½Ã۱â
½ºÆ®¸²ÀÇ ÆÄÀÏ À§Ä¡´Â ÆÄÀÏ ½ºÆ®¸²¿¡¼ ÇöÀç ¾î´À°÷À» Àаųª, ¾µ°ÍÀÎÁö¿¡ ´ëÇÑ °ÍÀÌ´Ù. ½ºÆ®¸²ÀÇ ÀÔÃâ·ÂÀº ÆÄÀÏÀÇ À§Ä¡¸¦ Áøº¸½ÃŲ´Ù. GNU½Ã½ºÅÛ¿¡¼´Â ÆÄÀÏÀÇ À§Ä¡´Â ÆÄÀÏÀÇ ½ÃÀÛÁ¡À¸·ÎºÎÅÍ ¹Ù ÀÌÆ®ÀÇ ¼ö¸¦ ¼ÀÇÑ Á¤¼ö°ªÀ¸·Î ³ªÅ¸³½´Ù. 6.1.2Àý [File Position] 58ÆäÀÌÁö ÂüÁ¶.
¿ªÀÚÁÖ: À̰÷¿¡¼ Áøº¸¶õ ¸»Àº ÆÄÀÏÀÇ À§Ä¡°¡ ¾ÕÀ¸·Î ¿Å°ÜÁø´Ù´Â ¸».
ÀϹÝÀû µð½ºÅ© ÆÄÀÏ¿¡¼ ÀÔ/Ãâ·Â µ¿¾È¿¡, ´ç½ÅÀº ÆÄÀÏÀÇ ¾î´À ºÎºÐÀ» Àаųª, ¾²±âÀ§ÇØ, ´ç½ÅÀÌ ¿øÇÏ ¸é ¾ðÁ¦µçÁö ÆÄÀÏÀÇ À§Ä¡¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù. ´ëºÎºÐÀÇ ÆÄÀϵ鿡¼ À̰ÍÀÌ Çã¿ëµÉ °ÍÀÌ´Ù. ÆÄÀÏ À§ Ä¡ÀÇ º¯°æÀ» Áö¿øÇÏ´Â ÆÄÀϵéÀº ¶§·Î´Â ·£´ý-¾ï¼¼½º ÆÄÀÏÀ̶ó ºÒ·ÁÁø´Ù.
´ç½ÅÀº ½ºÆ®¸²°ú °ü·ÃÇÏ¿© ÆÄÀÏ À§Ä¡¸¦ ½ÃÇèÇϰųª, ¼öÁ¤Çϱâ À§ÇØ ÀÌ Àý¿¡¼ ¼³¸íÇÑ ÇÔ¼öµéÀ» »ç ¿ëÇÒ ¼ö ÀÖ´Ù. ¹Ø¿¡ ¼³¸íµÈ °ÍµéÀº Çì´õÆÄÀÏ 'stdio.h'¿¡ ¼³¸íµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : long int ftell (FILE *stream)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸² streamÀÇ ÇöÀç ÆÄÀÏ À§Ä¡¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¸¸ÀÏ ½ºÆ®¸²ÀÌ ÆÄÀÏ À§Ä¡ º¯°æ À» Áö¿øÇÏÁö ¾Ê°Å³ª, ȤÀº ÆÄÀÏ À§Ä¡¸¦ long int·Î Ç¥ÇöÇÒ ¼ö ¾ø°Å³ª, ¶Ç´Â ´Ù¸¥ °¡´ÉÇÑ ¿©·¯ °¡Áö ÀÌÀ¯°¡ ¹ß»ýÇÏ¸é ½ÇÆÐÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ½ÇÆÐÇϸé -1ÀÇ °ªÀ» ¸®ÅÏ ÇÑ´Ù.
ÇÔ¼ö : int fseek (FILE *stream, long int offset, int whence)
fseekÇÔ¼ö´Â ½ºÆ®¸² streamÀÇ ÆÄÀÏ À§Ä¡¸¦ º¯°æÇϴµ¥ »ç¿ëµÈ´Ù. whence°ªÀº SEEK_SET, SEEK_CUR, ¶Ç´Â SEEK_END »ó¼öµé Áß Çϳª°¡ µÇ¾î¾ß Çϴµ¥, ÀÌ »ó¼ö °ªµéÀº offset°ú ¿¬°ü½ÃÄÑ ¼ ¹Ù²Ù±â ¿øÇÏ´Â ÆÄÀÏÀÇ À§Ä¡¸¦ ÁöÀûÇÏ°Ô µÈ´Ù. Áï, SEEK_SET´Â ÆÄÀÏÀÇ ½ÃÀÛÁ¡°ú offset¸¦ ¿¬°ü
½Ã۰í, SEEK_CURÀº ÆÄÀÏÀÇ ÇöÀçÀ§Ä¡¿Í offset¸¦ ¿¬°ü½Ã۰í, SEEK_END´Â ÆÄÀÏÀÇ ³¡°ú offset¸¦ ¿¬°ü½ÃŰ´Â °ÍÀÌ´Ù.
ÀÌ ÇÔ¼ö´Â ¼º°øÇϸé 0ÀÇ °ªÀ» ¸®ÅÏÇϰí, ½ÇÆÐÇϸé 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÑ´Ù. ¼º°øÀûÀΠȣÃâÀº ¶ÇÇÑ ½ºÆ®¸²ÀÇ ÆÄÀϳ¡(end-of-file) Áö½ÃÀÚ¸¦ Ŭ¸®¾î½ÃÄÑ, ungetc¸¦ ÅëÇÑ "µÚ·Î ¹Ð¸²"µ¿ÀÛÀÌ ¹«½ÃµÇµµ·Ï ÇÑ ´Ù. fseek´Â ÆÄÀÏ À§Ä¡¸¦ º¯°æÇϱâ Àü¿¡ ¹öÆÛµÈ Ãâ·ÂÀ» ¸ðµÎ Ç÷¯½¬ ½Ã۰í, ÆÄÀÏÀÇ Àû´çÇÑ À§Ä¡¿¡ ±×°ÍÀ» Àû´Â´Ù.
ȣȯ¼º ³ëÆ® : ºñ-POSIX ½Ã½ºÅ۵鿡¼, ftell °ú fseek¸¸ÀÌ ¹ÙÀ̳ʸ® ½ºÆ®¸²»ó¿¡¼ ¹ÏÀ½Á÷ÇÏ°Ô µ¿ ÀÛÇÑ´Ù. 7.14Àý [Binary Streams] 92ÆäÀÌÁö ÂüÁ¶Ç϶ó. ´ÙÀ½¿¡ ¼³¸íµÈ ½Éº¼ »ó¼öµéÀº fseekÇÔ¼öÀÇ whence Àμö·Î »ç¿ëÇϱâ À§ÇØ Á¤ÀǵǾú´Ù. ±×µéÀº ¶ÇÇÑ lseekÇÔ¼ö¿¡¼µµ »ç¿ëµÇ°í, ( 8.2Àý [I/O Primiteves] 105ÆäÀÌÁö ÂüÁ¶) ÆÄÀÏ Àá±Ý(locks)¿¡¼ offsetÀ» Á¤Çϱâ À§ÇØ( 8.7Àý [Control Operations] 113ÆäÀÌÁö ÂüÁ¶) »ç¿ëµÈ´Ù.
¸ÅÅ©·Î int SEEK__SET
À̰ÍÀº Á¤¼ö »ó¼ö·Î¼ fseekÇÔ¼ö¿¡ whenceÀμö·Î »ç¿ëµÇ¸é, offsetÀ» ÆÄÀÏÀÇ ½ÃÀÛÁ¡°ú ¿¬°ü½ÃÅ´À» ÁöÁ¤ÇÑ´Ù.
¸ÅÅ©·Î int SEEK__CUR
À̰ÍÀº Á¤¼ö »ó¼ö·Î¼ fseek ÇÔ¼ö¿¡¼ whenceÀμö¿¡ »ç¿ëµÇ¸é offset¸¦ ÆÄÀÏÀÇ ÇöÀçÀÇ À§Ä¡¿Í ¿¬°ü ½ÃÅ´À» ÁöÁ¤ÇÑ´Ù.
¸ÅÅ©·Î int SEEK__END
À̰ÍÀº Á¤¼ö »ó¼ö·Î¼ fseekÇÔ¼ö¿¡¼ whenceÀμö¿¡ »ç¿ëµÇ¸é offset¸¦ ÆÄÀÏÀÇ ³¡ À§Ä¡¿Í ¿¬°ü½ÃÅ´À» ÁöÁ¤ÇÑ´Ù.
ÇÔ¼ö : void rewind (FILE *stream)
rewind ÇÔ¼ö´Â ÆÄÀÏÀÇ ½ÃÀÛÁ¡À¸·Î ½ºÆ®¸² streamÀÇ À§Ä¡¸¦ Á¤ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¸®ÅÏ °ªÀÌ ¹ö·ÁÁö°í, ½ºÆ®¸²ÀÇ ¿¡·¯ Áö½ÃÀÚ°¡ ´Ù½Ã °íÃÄÁö´Â °ÍÀ» Á¦¿ÜÇϸé SEEK_SETÀ» whenceÀμö¿¡¼ »ç¿ëÇϰí, 0L °¡ offset Àμö¿¡¼ »ç¿ëµÈ fseekÇÔ¼ö¿Í µ¿µîÇÏ´Ù. À̵é SEEK_...'·Î ½ÃÀ۵Ǵ ¼¼ °¡Áö »ó¼öµéÀº ¿¹ ÀüÀÇ BSD ½Ã½ºÅÛµé°ú ȣȯÀ» ¸ñÀûÀ¸·Î Á¸ÀçÇÑ´Ù. ±×µéÀº µÎ °³ÀÇ ´Ù¸¥ Çì´õÆÄÀÏ 'fnctl.h' ¿Í 'sys/file.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.
L_SET SEEK_SETÀÇ ´Ù¸¥ À̸§.
L_INCR SEEK_CURÀÇ ´Ù¸¥ À̸§.
L_XTND SEEK_ENDÀÇ ´Ù¸¥ À̸§.
7.16 ȣȯ¼º ÀÖ´Â ÆÄÀÏ-À§Ä¡ ÇÔ¼öµé.
GNU ½Ã½ºÅÛ »ó¿¡¼, ÆÄÀÏÀÇ À§Ä¡·Î ¹®ÀÚµéÀ» ¼¼¾î¼ ÇÒ ¼ö ÀÖ´Ù. ´ç½ÅÀº fseekÀÇ Àμö·Î ¹®ÀÚ °³¼ö ÀÇ °ªÀ» Á¤ÇÒ ¼öµµ ÀÖ°í, ·£´ý ¾ï¼¼½ºÆÄÀÏ¿¡¼ ÀÌÇØ °¡´ÉÇÑ °á°ú¸¦ ¾ò´Â´Ù. ±×·¸Áö¸¸ ANSI C½Ã½º ÅÛ¿¡¼´Â ÀÌ ¹æ¹ýÀ¸·Î ÆÄÀÏ À§Ä¡¸¦ Ç¥ÇöÇÒ ¼ö ¾ø´Ù.
ÅØ½ºÆ® ½ºÆ®¸²°ú ¹ÙÀ̳ʸ® ½ºÆ®¸²ÀÌ Â÷À̸¦ °®°í ÀÖ´Â ½Ã½ºÅ۵鿡¼´Â, ÆÄÀÏÀÇ ½ÃÀÛÁ¡¿¡¼ ¹®ÀÚµéÀ» ¼¼´Â °ÍÀ¸·Î ÅØ½ºÆ® ½ºÆ®¸²ÀÇ ÆÄÀÏ À§Ä¡¸¦ Ç¥ÇöÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î, ¾î¶² ½Ã½ºÅ۵鿡 ¼ ÆÄÀÏ À§Ä¡´Â ÆÄÀÏ ¾ÈÀÇ ·¹ÄÚµå ¿É¼Â°ú, ·¹ÄÚµåÀÇ ¹®ÀÚ ¿É¼Â, ÀÌ µÑÀ» ´Ù ÇØÁà¾ßÇÑ ÇÑ´Ù.
°á°úÀûÀ¸·Î, ´ç½ÅÀÌ, ´ç½Å ÇÁ·Î±×·¥ÀÌ ÀÌ ½Ã½ºÅÛµé°ú ȣȯµÇ±â¸¦ ¿øÇÑ´Ù¸é ¾î¶² ±ÔÄ¢µéÀ» ÁؼöÇØ¾ßÇÏ ´Â °ÍÀÌ´Ù.
o ÅØ½ºÆ® ½ºÆ®¸² »ó¿¡¼ ftell·Î ºÎÅÍ ¸®ÅÏ µÇ´Â °ªÀº ´ç½ÅÀÌ Áö±Ý±îÁö ÀÐÀº ¹®ÀÚµéÀÇ ¼ö¿Í ¾Æ¹«·± ¿¬°üÀÌ ¾ø´Ù. ´ç½ÅÀÌ ÀÇÁöÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ °ÍÀº °°Àº ÆÄÀÏ À§Ä¡¿¡¼ µÚ·Î ¿Å±â±â À§ÇØ fseekÇÔ¼ö¿¡ offsetÀμö·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
o ÅØ½ºÆ® ½ºÆ®¸²»ó¿¡¼ fseek¸¦ È£ÃâÇÏ·Á¸é, offsetÀÌ 0ÀÌ µÇ°Å³ª; ¾Æ´Ï¸é whence´Â SEEK_SETÀ¸·Î ÁÖ°í offset´Â µ¿ÀÏÇÑ ½ºÆ®¸²»ó¿¡¼ ¹Ì¸® ftellÈ£Ãâ·Î ¾ò¾îÁø °ªÀÌ µÇ¾î¾ß ÇÑ´Ù.
o ÅØ½ºÆ® ½ºÆ®¸²¿¡¼ ÆÄÀÏ À§Ä¡ÀÇ °ªÀº ungetc¸¦ ÅëÇØ¼ µÚ·Î ¹Ð¸° (pushed back), ÀÐÇôÁöÁö ¾Ê¾Ò°Å ³ª , ¹ö·ÁÁø ¹®Àڵ鿡 ´ëÇÑ °ÍÀº Á¤ÀÇ µÇ¾îÀÖÁö ¾Ê´Ù. 7.8Àý [Unreading] 69ÆäÀÌÁö ÂüÁ¶.
±×·¯³ª ´ç½ÅÀÌ ÀÌµé ±ÔÄ¢À» ÁؼöÇÑ´Ù°í ÇÏ´õ¶óµµ, ´ç½ÅÀº ¿©ÀüÈ÷ ±ä ÆÄÀϵéÀ» ´Ù·ê ¶§ ¹®Á¦°¡ ÀÖ´Â µ¥, ±×°ÍÀº ftell°ú fseek°¡ ÆÄÀÏ À§Ä¡¸¦ ³ªÅ¸³»´Â °ªÀ¸·Î long int °ªÀ» »ç¿ëÇϱ⠶§¹®ÀÌ´Ù. ±× ÇüÀ¸ ·Î´Â ±ä ÆÄÀϾÈÀÇ ¸ðµç ÆÄÀÏÀ§Ä¡¸¦ Ç¥ÇöÇØÁÙ ¼ö ¾ø´Ù. ±×·¡¼ ¸¸ÀÏ ´ç½ÅÀÌ ÀÌ·¯ÇÑ ÆÄÀÏÀ§Ä¡¸¦ ³ªÅ¸ ³»±â À§Çؼ Ư¼öÇÑ ½Ã½ºÅÛ Áö¿øÀ» ¿øÇÑ´Ù¸é ftell°ú fseek´ë½Å¿¡ fgetpos¿Í fsetpos¸¦ »ç¿ëÇÏ´Â ÆíÀÌ
ÁÁ´Ù. ÀÌ ÇÔ¼öµéÀº ½Ã½ºÅÛ¿¡¼ ½Ã½ºÅÛÀ¸·Î ³»ºÎÀû Ç¥ÇöÀ» ¹Ù²Ù´Â µ¥ÀÌÅÍ Å¸ÀÔ fpos_t¸¦ »ç¿ëÇØ¼ ÆÄ ÀÏ À§Ä¡¸¦ ³ªÅ¸³½´Ù.
ÀÌ ½Éº¼µéÀº Çì´õÆÄÀÏ 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : fpos__t
À̰ÍÀº fgetpos¿Í fsetposÇÔ¼ö¿¡ ÀÇÇØ »ç¿ëµÇ´Â, ½ºÆ®¸²ÀÇ ÆÄÀÏ À§Ä¡¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ÏÈ£ÈÇÒ ¼ö ÀÖ ´Â objectÀÇ Å¸ÀÔ´Ï´Ù. GNU½Ã½ºÅÛ¿¡¼´Â, fpos_t´Â off_t³ª long int¿Í µ¿ÀÏÇÏÁö¸¸ ´Ù¸¥ ½Ã½ºÅÛ¿¡¼ ´Â, ¾î¶² ³»ºÎÀû Â÷À̸¦ °¡Áú °ÍÀÌ´Ù.
ÇÔ¼ö : int fgetpos (FILE *stream, fpos_t *position)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸² streamÀ» À§Çؼ ÆÄÀÏ À§Ä¡ Áö½ÃÀÚÀÇ °ªÀ» fpos_tÀÇ ÇüÀ» °¡Áø positionÀÌ ÁöÁ¤ÇÏ °í ÀÖ´Â °÷¿¡ ÀúÀåÇÏ´Â ±â´ÉÀ» ÇÑ´Ù. ¸¸ÀÏ ¼º°øÇϸé fgetpos´Â 0À» ¸®ÅÏÇϰí, ±×·¸Áö ¾ÊÀ¸¸é ¿µÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÏ°í ¿¡·¯¹øÈ£ errno¸¦ ÀúÀåÇÑ´Ù.
ÇÔ¼ö : int fsetpos (FILE *stream, const fpos_t position)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸²À» À§ÇÑ ÆÄÀÏ Áö½ÃÀÚÀÇ °ªÀ» µ¿ÀÏÇÑ ½ºÆ®¸²»ó¿¡¼ positionÀ§Ä¡·Î ¼³Á¤Çϴµ¥, ±× »õ·Î¿î À§Ä¡´Â ÀÌÀü¿¡ È£ÃâÇÑ fgetpos¿¡ ÀÇÇØ ¾ò¾îÁø °ªÀ̾î¾ß ÇÑ´Ù. ¸¸ÀÏ ¼º°øÇϸé, fsetpos´Â ½ºÆ® ¸²»óÀÇ end-of-file Áö½ÃÀÚ¸¦ Ŭ¸®¾î½ÃÄÑ ungetc¸¦ ÅëÇÑ "pushed back"µ¿ÀÛÀÌ ºÒ°¡´ÉÇÏ°Ô Çϰí, 0ÀÇ °ªÀ» ¸®ÅÏ ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é fsetpos´Â 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÏ°í ¿¡·¯¹øÈ£ errno¸¦ ÀúÀåÇÑ´Ù.
7.17 ½ºÆ®¸² ¹öÆÛ¸µ.
¹®ÀÚµéÀº ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥¿¡ ÀÇÇØ Ãâ·ÂÀ¸·Î ¹Ù·Î ³ªÅ¸³ª´Â ´ë½Å¿¡ ÀϹÝÀûÀ¸·Î ¹®ÀÚµéÀ» ¸ð¾Æ ¼ ½ºÆ®¸²À¸·Î Ãâ·ÂÇϰųª, ÇϳªÀÇ ºí·ÏÀ¸·Î ÆÄÀÏ¿¡°Ô ºñµ¿±âÀûÀ¸·Î Àü¼ÛµÈ´Ù. À¯»çÇϰÔ, ½ºÆ®¸²µé Àº Á¾Á¾ ¹®ÀÚ ´ë ¹®ÀÚ¶õ ¿ø¸®º¸´Ù´Â ºí·ÏÀ¸·ÎºÎÅÍ ÀÔ·ÂÀ» °Ë»öÇÑ´Ù. À̰ÍÀ» ¹öÆÛ¸µÀ̶ó ºÎ¸¥´Ù.
¸¸¾à ´ç½ÅÀÌ ½ºÆ®¸²À» »ç¿ëÇØ¼ ÀԷ°ú Ãâ·ÂÀ» ÇàÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé·Á ÇÑ´Ù¸é, ´ç½ÅÀÌ ´ç½ÅÀÇ ÇÁ ·Î±×·¥¿¡¼ À¯Àú ÀÎÅÍÆäÀ̽º¸¦ ±¸¼ºÇÒ ¶§, ¹öÆÛ¸µÀ̶õ °ÍÀÌ ¾î¶»°Ô ÀÛµ¿µÇ´ÂÁö ÀÌÇØÇÒ Çʿ䰡 ÀÖ´Ù.
±×·¸Áö ¾ÊÀ¸¸é ´ç½ÅÀº ´ç½ÅÀÌ ÀǵµÇÑ´ë·Î ³ªÅ¸³ªÁö ¾ÊÀº Ãâ·ÂÀ» ã°Å³ª, À¯Àú¿¡ ÀÇÇØ ŸÀÔµÈ(typed) ÀÔ·ÂÀÌ ´Ù¸¥ ¿¹»óÇÏÁö ¸øÇÑ µ¿ÀÛÀ̰ųª, ´ÜÀÏ ¹®ÀÚÀÎÁö¸¦ üũÇϰí, ±×°ÍÀÌ À¯¿ëÇÏ°Ô µÇµµ·Ï ¸¸µé¾î ¾ßÇÑ´Ù.
ÀÌ ÀýÀº ¹ÝÇâ(echoing), Á¦¾îÈ帧( flow control ), ±×¸®°í µð¹ÙÀ̽ºµéÀÇ Á¤ÇØÁø ºÎ·ù·Î Ãë±ÞµÇ¾îÁö´Â °Í°ú °°Àº °ÍÀÌ ¾Æ´Ñ ÆÄÀÏÀ̳ª µð¹ÙÀ̽ºµé°ú, ½ºÆ®¸² »çÀÌ¿¡ ¹®ÀÚµéÀÌ ¼Û½ÅµÇ¾îÁú ¶§ Á¦¾îÇÏ´Â °ÍÀ» Ãë±ÞÇϰí ÀÖ´Ù. Å͹̳Πµð¹ÙÀ̽ºÀÇ ÀϹÝÀû Á¦¾î ¸í·Éµé¿¡ ´ëÇÑ Á¤º¸´Â 12Àå [Low-Level Terminal Interface], 185ÆäÀÌÁö¸¦ ÂýÁ¶.
´ç½ÅÀº ÆÄÀϱâ¼úÀÚ¿¡¼ µ¿ÀÛÇÏ´Â Àú¼öÁØ ÀԷ°ú Ãâ·Â ÇÔ¼öµéÀ» »ç¿ëÇÏ¸é ½ºÆ®¸² ¹öÆÛ¸µ µµ±¸µéÀº ¹«½ÃÇÒ ¼ö ÀÖ´Ù.
7.17.1 ¹öÆÛ¸µ °³³äµé
¹öÆÛ¸µ ¹æ¹ý¿¡ ´ëÇÑ ¼¼ °¡Áö Á¾·ù.
o ºñ¹öÆÛÈµÈ ½ºÆ®¸²À¸·ÎºÎÅÍ Àаųª ¾µ ¹®ÀÚµéÀº °¡´ÉÇÑ ÇÑ »¡¸® ÆÄÀÏ·Î ¶Ç´Â, ÆÄÀϷκÎÅÍ °³º°Àû À¸·Î Àü¼ÛµÇ¾îÁø´Ù.
o ¶óÀÎ ¹öÆÛ ½ºÆ®¸²À¸·Î ºÎÅÍ Àаųª ¾µ ¹®ÀÚµéÀº »õÁÙ ¹®ÀÚ¸¦ ¸¸³¯ ¶§ ºí·Ï´ÜÀ§·Î ÆÄÀÏ·Î, ¶Ç´Â ÆÄÀÏ¿¡¼ Àü¼ÛµÇ¾îÁø´Ù.
o ¿ÏÀü ¹öÆÛ ½ºÆ®¸²À¸·Î ºÎÅÍ Àаųª ¾µ ¹®ÀÚµéÀº ´Ù¾çÇÑ Å©±âÀÇ ºí·Ï ÇüÅ·ΠÆÄÀÏ·Î, ¶Ç´Â ÆÄÀÏ·Î ºÎÅÍ Àü¼ÛµÇ¾îÁø´Ù.
»õ·ÎÀÌ °³¹æµÈ ½ºÆ®¸²µéÀº ÇѰ¡Áö¸¦ Á¦¿ÜÇϰí´Â, ÀϹÝÀûÀ¸·Î ¿ÏÀüÇÑ ¹öÆÛÀÌ´Ù; Å͹̳ΰú °°Àº ´ëÈ ½Ä µð¹ÙÀ̽º¿Í ¿¬°áµÈ ½ºÆ®¸²Àº óÀ½¿¡ ¶óÀÎ ¹öÆÛ·Î µÇ¾îÁø´Ù. ´Ù¸¥ Á¾·ùÀÇ ¹öÆÛ¸¦ ¾î¶»°Ô ¼±ÅÃÇÏ ´ÂÁö¿¡ ´ëÇÑ Á¤º¸´Â 7.13.3Àý [Controlling Buffering] 96ÆäÀÌÁö¸¦ ÂüÁ¶.
´ëȽÄ(interactive) µð¹ÙÀ̽ºµéÀ» À§ÇÑ ¶óÀÎ ¹öÆÛÀÇ »ç¿ë¿¡¼ »õ·Î¿î ÁÙ·Î( newline ) ³¡³ª´Â Ãâ·Â ¸Þ½ÃÁö´Â º¸ÅëÀº Áï°¢ÀûÀ¸·Î Ãâ·ÂµÉ °ÍÀ̰í À̰ÍÀº º¸Åë ´ç½ÅÀÌ ¿øÇÏ´Â °ÍÀÌ´Ù. »õ·Î¿î ÁÙ·Î ³¡³ª Áö ¾Ê´Â Ãâ·ÂÀº Áï½Ã Ãâ·ÂµÇÁö ¾ÊÀ»Áöµµ ¸ð¸£´Âµ¥, ±×·¡¼ ¸¸ÀÏ ´ç½ÅÀÌ ±×µéÀÌ Áï°¢ÀûÀ¸·Î Ãâ·ÂµÇ±æ ¿øÇÑ´Ù¸é, ´ç½ÅÀº fflush¸¦ »ç¿ëÇØ¼ ¸í½ÃÀûÀ¸·Î ¹öÆÛµÈ Ãâ·ÂÀ» ³ª¿À°Ô ÇØ¾ßÇÑ´Ù. À̰Ϳ¡ ´ëÇÑ ¼³¸í Àº 7.12.2Àý [Flushing Buffers] ÆäÀÌÁö96ÂüÁ¶.
¶óÀÎ ¹öÆÛ¸µÀº Å͹̳¯ »ó¿¡¼ ÀÔ·ÂÀ» ¹Þ±â¿¡ ÁÁÀºµ¥, ±× ÀÌÀ¯´Â ´ëºÎºÐÀÇ ´ëȽÄ(interactive) ÇÁ·Î±× ·¥µéÀÌ º¸Åë ´ÜÀÏÇÑ ¶óÀÎÀ¸·Î µÈ ¸í·ÉÀ» Àб⠶§¹®ÀÌ´Ù. ÇÁ·Î±×·¥Àº Áï½Ã °¢ ¶óÀÎÀ» ½ÇÇàÇÒ ¼ö ÀÖ À» °ÍÀÌ´Ù. ¶óÀÎ ¹öÆÛ ½ºÆ®¸²Àº À̰ÍÀ» Çã¿ëÇÏÁö¸¸, ¿ÏÀüÇÑ ¹öÆÛ ½ºÆ®¸²Àº ±×°ÍÀ» Àеµ·Ï ÇÁ·Î±×·¥ ¿¡ Çã¿ëµÇ±â Àü¿¡ ¹öÆÛ¸¦ ä¿ö Ç×»ó ÃæºÐÇÑ ÅØ½ºÆ®¸¦ Àд´Ù. ¶óÀÎ ¹öÆÛ¸µÀº ´ëºÎºÐÀÇ ¿î¿µÃ¼Á¦¿¡¼ ¶óÀÎ ´ÜÀ§ÀÇ ÀԷ¿¡¼ ÀÛµ¿ÇÏ´Â º¸ÅëÀÇ ÀÔ·Â-ÆíÁý±â·Î ¾Ë¸Â´Ù.
¾î¶² ÇÁ·Î±×·¥µéÀº ºñ¹öÆÛÈµÈ Å͹̳¯ ÀÔ·Â ½ºÆ®¸²ÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ ÇÁ·Î±×·¥µéÀº ´ÜÀÏ-¹®ÀÚ ¸í·Éµé À» Àд ÇÁ·Î±×·¥°ú (Emacs¿Í °°Àº)±×µé ÀÚ½ÅÀÌ ÀÔ·ÂÀ» ÆíÁýÇÏ´Â ÇÁ·Î±×·¥µé( readlineÀ» »ç¿ëÇÏ´Â °Íµéó·³)ÀÌ´Ù. ÇÑ ¹ø¿¡ ÇÑ ¹®ÀÚ¸¦ Àбâ À§Çؼ, ÀÔ·Â ½ºÆ®¸²ÀÇ ¹öÆÛ¸µÀ» ¸ØÃß°Ô ÇÏ´Â °Í¸¸À¸·Î ÃæºÐ ÇÏÁö ¾Ê°í, ¿î¿µÃ¼Á¦°¡ ÇàÇÏ´Â ÀÔ·Â ÆíÁýÀÇ ÀÛ¿ëµµ ¸ØÃß°Ô ÇØ¾ßÇÑ´Ù. À̰ÍÀº Å͹̳Π¸ðµå¸¦ ¹Ù²Ù¾î¾ß ÇÑ´Ù.( 12.4Àý [Terminal Modes] 186ÆäÀÌÁö ÂüÁ¶). ¸¸ÀÏ ´ç½ÅÀÌ Å͹̳Π¸ðµå¸¦ ¹Ù²Ù±â ¿øÇÑ´Ù¸é, ´ç ½ÅÀº °³º°ÀûÀ¸·Î-´ÜÁö ¸ðµåµéÀ» º¯ÈÇÏÁö ¾Ê´Â ºñ¹öÆÛÈµÈ ½ºÆ®¸²À» »ç¿ëÇÏ¿© À̰ÍÀ» ÇØ¾ß¸¸ ÇÑ´Ù.
7.17.2 ¹öÆÛ¸¦ ½ñ¾Æ³»±â
¿ªÀÚÁÖ: À̰÷¿¡¼ ½ñ¾Æ³»±â¶õ ´Ü¾î´Â ¹öÆÛ¿¡ ÀÖ´Â ³»¿ëÀ» °Á¦Àû(?)À¸·Î ÆÄÀÏ·Î Àü¼Û½ÃŰ°í ¹öÆÛ¸¦ ºñ¿ì´Â ±×·± Àǹ̸¦ ³»Æ÷Çϰí ÀÖ´Ù.
¹öÆÛµÈ ½ºÆ®¸²»ó¿¡¼ Ãâ·Â ½ñ¾Æ³»±â(Flushing)´Â ¹öÆÛ¿¡ ¸ð¾ÆÁø ¸ðµç ¹®ÀÚµéÀ» ÆÄÀÏ·Î Àü¼ÛÇϴ°ÍÀ» ÀǹÌÇÑ´Ù. ´ÙÀ½Àº ½ºÆ®¸²»ó¿¡¼ ¹öÆÛÈµÈ Ãâ·ÂÀÌ ÀÚµ¿ÀûÀ¸·Î ½ñ¾ÆÁú ¶§ÀÇ ¸¹Àº »óȲÀÌ´Ù.
o ´ç½ÅÀÌ Ãâ·ÂÀ» ÇÏ·Á ½ÃµµÇϰí, Ãâ·Â ¹öÆÛ´Â °¡µæ Â÷ÀÖÀ» ¶§.
o ½ºÆ®¸²ÀÌ ´ÝÇôÀÖÀ» ¶§. 7.4Àý [Closing Streams] 65ÆäÀÌÁö ÂüÁ¶.
o ÇÁ·Î±×·¥ÀÌ exit¸¦ È£ÃâÇÏ¿© Á¾·áµÉ ¶§. 22.3.1Àý [Normal Termination] 320ÆäÀÌÁö ÂüÁ¶.
o ¸¸ÀÏ ½ºÆ®¸²ÀÌ ¶óÀÎ ¹öÆÛ¶ó¸é, »õÁÙ ±âÈ£¸¦ ¸¸³µÀ» ¶§
o ÆÄÀϷκÎÅÍ µ¥ÀÌÅ͸¦ ½ÇÁ¦ÀûÀ¸·Î Àд ¾î´À ½ºÆ®¸²»ó¿¡¼ ÀÔ·Â ¸í·ÉÀÌ ÀÖÀ» ¶§¸¶´Ù.
¸¸ÀÏ ´ç½ÅÀÌ ´Ù¸¥ ¶§(¿ªÀÚÁÖ : À§ÀÇ »óȲÀÌ ¾Æ´Ñ°æ¿ì) ¹öÆÛµÈ Ãâ·ÂÀ» ½ñ¾Æ³»±æ ¿øÇÑ´Ù¸é, fflush¸¦ È£ ÃâÇ϶ó, ±×°ÍÀº Çì´õÆÄÀÏ 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : int fflush (FILE *stream)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸²»ó¿¡¼ ¹öÆÛÈµÈ ¾î¶² Ãâ·ÂÀ» ÆÄÀÏ·Î ¹è´ÞÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ¸¸¾à ½ºÆ®¸²ÀÌ ³Î Æ÷ ÀÎÅͶó¸é fflush´Â ¿·ÁÁø ¸ðµç Ãâ·Â ½ºÆ®¸²ÀÇ ¹öÆÛÈµÈ Ãâ·ÂÀ» °Á¦·Î °ü·Ã ÆÄÀÏ¿¡ ³»º¸³½´Ù. ÀÌ ÇÔ¼ö´Â ¸¸¾à ¾²±â ¿¡·¯°¡ ¹ß»ýÇϸé EOF¸¦ ¸®ÅÏÇϰí, ¾Æ´Ï¸é 0À» ¸®ÅÏÇÑ´Ù.
ȣȯ¼º ³ëÆ® : ¾î¶² ¸Ó¸®°¡ ¸ðÀÚ¶ó´Â( À½... ÀÌ Ç¥ÇöÀÌ °¡Àå Àû´çÇÑ °Í °°´Ù. ŰŰŰ...) ¿î¿µÃ¼Á¦ ´Â »õÁÙ ±âÈ£¸¦ ¸¸³ª¸é ¶óÀÎ ¹öÆÛµÈ ½ºÆ®¸²À» ½ñ¾Æ³»´Â ¶óÀÎ-ÁöÇâ ÀԷ°ú Ãâ·ÂÀ¸·Î ¿ÏÀüÈ÷ °íÁ¤½Ã ÄÑ ³õÀº °ÍÀ¸·Î ¾Ë·ÁÁ®ÀÖ´Ù! ÇÏÁö¸¸, ´ÙÇེ·´°Ôµµ ÀÌ "Ư¡"Àº ÀϹÝÀûÀÎ Çö»óÀº ¾Æ´Ñ °Í °°´Ù. ´ç½ÅÀº ÀÌ GNU ½Ã½ºÅÛ¿¡ ´ëÇØ¼´Â ¾Æ¹«·± °ÆÁ¤ÇÒ Çʿ䰡 ¾ø´Ù.
7.17.3 ¹öÆÛ¸µÀÇ Á¾·ù Á¦¾îÇϱâ
½ºÆ®¸²ÀÌ °³¹æµÈ Á÷ÈÄ¿¡( ±×·¯³ª ±× ½ºÆ®¸²¿¡ ¾î¶² ´Ù¸¥ ¸í·Éµµ ¼öÇàµÇÁö ¾Ê¾Ò´Ù. ), ´ç½ÅÀº setvbuf ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ´ç½ÅÀÌ ¿øÇÏ´Â ¹öÆÛ¸µÀÇ Á¾·ù¸¦ ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ Àý¿¡ ¸®½ºÆ®µÈ µµ ±¸µéÀº Çì´õÆÄÀÏ 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö: int setvbuf (FILE *stream, char *buf, int mode, size_t size)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸²ÀÎ streamÀ» ¹öÆÛ¸µ ¸ðµåÀÎ mode¸¦ °®µµ·Ï Á¤Çϴµ¥ »ç¿ëÇÑ´Ù. mode¿¡´Â _IOFBF(¿ÏÀüÇÑ ¹öÆÛ¸µ), _IOLBF(¶óÀÎ ¹öÆÛ¸µ), À̳ª _IONBF( ºñ¹öÆÛÈµÈ ÀÔ/Ãâ·ÂÀ» À§ÇØ )µé Áß¿¡ ¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ bufÀμö¿¡ ³Î Æ÷ÀÎÅ͸¦ Á¤Çϸé, setvbuf´Â malloc¸¦ »ç¿ëÇÏ¿© ½º½º ·Î ¹öÆÛ¸¦ ÇÒ´çÇÑ´Ù. ÀÌ ¹öÆÛ´Â ´ç½ÅÀÌ ½ºÆ®¸²À» ´ÝÀ» ¶§ ÇØÁ¦µÈ´Ù.
±×·¸Áö ¾ÊÀ¸¸é, buf´Â Àû¾îµµ ¹®ÀÚ¿À» ÀúÀåÇÒ ¼ö ÀÖ´Â ¹®ÀÚ¹è¿ÀÌ µÇ¾î¾ß ÇÑ´Ù. ´ç½ÅÀº ±× ½ºÆ®¸² ÀÌ ¿·ÁÁø »óÅ·ΠÀÖ°í, ÀÌ ¹è¿ÀÌ ¹öÆÛ¾È¿¡ ³²¾ÆÀÖ´Â µ¿¾ÈÀº ÀÌ ¹è¿À» À§ÇØ ÇÒ´çµÈ °ø°£À» ÇØÁ¦ÇÒ ¼ö ¾ø´Ù. ´ç½ÅÀº ¹öÆÛ¸¦ Á¤ÀûÀ¸·Î ÇÒ´çÇϰųª, mollocÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.( 3.3.Àý [Unconstrained Allocation] 22ÆäÀÌÁö ÂüÁ¶]. ÀÚµ¿ ¹è¿À» »ç¿ëÇÏ´Â °ÍÀº ¹è¿À» ¼±¾ðÇÑ ºí·ÏÀÌ Á¸ÀçÇϱ⵵ Àü¿¡ ±× ÆÄÀÏÀÌ ´ÝÈú ¼öµµ ÀÖÀ¸¹Ç·Î ÁÁÀº »ý°¢ÀÌ ¾Æ´Ï´Ù.
¹è¿ÀÌ ½ºÆ®¸² ¹öÆÛ¿¡ ³²¾ÆÀÖ´Â µ¿¾È ½ºÆ®¸² ÀÔ/Ãâ·Â ÇÔ¼ö´Â ±×µéÀÇ ³»ºÎÀÇ ¸ñÀûµé·Î ¹öÆÛ¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. ´ç½ÅÀº ½ºÆ®¸²ÀÌ ¹öÆÛ¸µÀ» À§ÇØ »ç¿ëµÇ°í ÀÖ´Â µ¿¾È¿¡´Â Á÷Á¢ÀûÀ¸·Î ±× ¹è¿ÀÇ °ªÀ» ¾ï¼¼ ½ºÇÏ·Á ½ÃµµÇÒ ¼ö ¾ø´Ù. setvbufÇÔ¼ö´Â ¼º°øÇϸé 0À» ¸®ÅÏÇϰí, modeÀÇ °ªÀÌ À¯¿ëÇÏÁö ¾Ê°Å³ª, ±× ¿äûÀÌ ¹Þ¾Æµé¿©Áú ¼ö ¾øÀ¸¸é 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÑ´Ù.
¸ÅÅ©·Î : int __IOFBF
ÀÌ ¸ÅÅ©·ÎÀÇ °ªÀº Á¤¼ö »ó¼ö Ç¥ÇöÀ¸·Î ½ºÆ®¸²À» ¿ÏÀüÇÑ ¹öÆÛ·Î Á¤Çϱâ À§Çؼ, setvbuf ÇÔ¼ö¿¡¼ mode Àμö¿¡¼ »ç¿ëµÇ¾îÁú ¼ö ÀÖ´Ù.
¸ÅÅ©·Î : int __IOLBF
ÀÌ ¸ÅÅ©·Î °ªÀº ½ºÆ®¸²À» ¶óÀÎ ¹öÆÛ·Î Á¤Çϱâ À§Çؼ setvbuf ÇÔ¼ö¿¡¼ mode Àμö·Î¼ »ç¿ëµÇ¾îÁú ¼ö ÀÖ´Â Á¤¼ö °ªÀÇ »ó¼ö Ç¥ÇöÀÌ´Ù.
¸ÅÅ©·Î : int __IONBF
ÀÌ ¸ÅÅ©·Î °ªÀº ½ºÆ®¸²À» ºñ¹öÆÛÈ·Î Á¤Çϱâ À§ÇØ setvbufÇÔ¼ö¿¡¼ mode Àμö·Î »ç¿ëµÇ¾îÁú ¼ö ÀÖ ´Â Á¤¼ö °ªÀÇ »ó¼ö Ç¥ÇöÀÌ´Ù.
¸ÅÅ©·Î ; int BUFSIZ
ÀÌ ¸ÅÅ©·Î °ªÀº setvbuf ÇÔ¼ö¿¡¼ size Àμö·Î »ç¿ëµÇ±â¿¡ ÁÁÀº Á¤¼ö °ªÀÇ »ó¼ö Ç¥ÇöÀÌ´Ù. ÀÌ °ªÀº Àû¾îµµ 256À» º¸ÀåÇÑ´Ù. BUFSIZÀÇ °ªÀº ÀÔ/Ãâ·Â ½ºÆ®¸²À» ´É·üÀûÀ¸·Î ¸¸µé±â À§Çؼ °¢ ½Ã½ºÅÛ¿¡ µû¶ó ¼±ÅõȴÙ. ±×·¡¼ ´ç½ÅÀÌ setvbuf¸¦ È£ÃâÇÒ ¶§ ¹öÆÛ¸¦ À§ÇÑ Å©±â·Î BUFSIZÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ½ÇÁ¦·Î, ´ç½ÅÀº fstat( ¿ªÀÚÁÖ:¾Ó~ ¹ºÁö ¸ð¸£°Ú´Ù. ) ½Ã½ºÅÛ È£ÃâÀÇ ¹æ¹ýÀ¸·Î ¹öÆÛ Å©±â¿¡ »ç¿ë Çϱâ À§ÇØ ´õ ÁÁÀº °ªÀ» ¾òÀ» ¼ö ÀÖ´Ù.; À̰ÍÀº ÆÄÀÏ ¼Ó¼ºÀÇ st_blksize Çʵ忡¼ ¹ß°ßµÇ¾îÁø´Ù. 9.8.1 Àý [Attribute Meanings] 131ÆäÀÌÁö ÂüÁ¶.
¶§¶§·Î »ç¶÷µéÀº ¶ÇÇÑ fgets( 7.6Àý [Character Input] 66ÆäÀÌÁö ÂüÁ¶)¸¦ »ç¿ëÇØ¼ ÀÔ·ÂÀÇ ÇÑ ¶óÀÎÀ» ¹Þ¾ÆµéÀ̴µ¥ »ç¿ëµÇ´Â ¹®ÀÚ¿(strings)ó·³, ¿¬°üµÈ ¸ñÀûÀ» À§ÇØ »ç¿ëÇÏ´Â ¹öÆÛµéÀÇ ÇÒ´ç Å©±â·Î BUFSIZ¸¦ »ç¿ëÇÑ´Ù. È¿°úÀûÀÎ µ¢¾î¸®·Î ÀÔ/Ãâ·ÂÀ» ÇàÇϱâ À§ÇÑ °ÍÀ» Á¦¿ÜÇϰí´Â, ¾î´À ´Ù¸¥ Á¤¼ö °ª ´ë½Å¿¡ BUFSIZÀ» »ç¿ëÇÒ Æ¯º°ÇÑ ÀÌÀ¯°¡ ¾Æ¹«°Íµµ ¾ø´Ù.
ÇÔ¼ö : void setbuf (FILE *stream, chr *buf)
¸¸ÀÏ buf°¡ ³Î Æ÷ÀÎÅͶó¸é ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÑ È¿°ú´Â _IONBFÀÇ ¸ðµå Àμö¸¦ »ç¿ëÇØ¼ setvbuf¸¦ È£ ÃâÇÑ °Í°ú µ¿µîÇÏ´Ù. ±×·¸Áö ¾Ê´Ù¸é, _IOFBFÀÇ ¸ðµå Àμö°ú BUFSIZÀÇ Å©±â Àμö¸¦ »ç¿ëÇÑ buf·Î setvbuf¸¦ È£ÃâÇѰͰú µ¿µîÇÏ´Ù. ±× setbuf ÇÔ¼ö´Â ¿À·¡µÈ ÄÚµå¿ÍÀÇ È£È¯¼ºÀ» À§ÇØ Á¦°øµÇ°í ÀÖ´Ù.; »õ·Î¿î ÇÁ·Î±×·¥µéÀº ¸ðµÎ setvbuf¸¦ »ç¿ëÇ϶ó.
ÇÔ¼ö : void setbuffer (FILE *stream, char *buf, size_t size)
¸¸ÀÏ buf°¡ ³Î Æ÷ÀÎÅͶó¸é, ÀÌ ÇÔ¼ö´Â ºñ¹öÆÛÈµÈ ½ºÆ®¸²À» ¸¸µç´Ù. ±×·¸Áö ¾Ê´Ù¸é ÀÌ ÇÔ¼ö´Â ¹öÆÛ·Î ¼ ¿ÏÀüÇÑ ¹öÆÛÈµÈ ½ºÆ®¸²À» ¸¸µç´Ù. sizeÀμö´Â bufÀÇ ±æÀ̸¦ Á¤ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¿À·¡µÈ BSD ÄÚ µå¿ÍÀÇ È£È¯¼º ¶§¹®¿¡ Á¦°øµÇ°í ÀÖ´Ù. ´ë½Å¿¡ setvbuf¸¦ »ç¿ëÇ϶ó.
ÇÔ¼ö : void setlinebuf (FILE *stream)
ÀÌ ÇÔ¼ö´Â ¶óÀÎ ¹öÆÛµÈ ½ºÆ®¸²À» ¸¸µé°í, ¹öÆÛ¸¦ ÇÒ´çÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¿À·¡µÈ BSD ÄÚµå¿ÍÀÇ È£È¯ À» À§ÇØ Á¦°øµÇ°í ÀÖ´Ù. setvbuf¸¦ »ç¿ëÇ϶ó.
7.18 ´Ù¸¥ Á¾·ùÀÇ ½ºÆ®¸².
GNU ¶óÀ̺귯¸®´Â °³¹æµÈ ÆÄÀϰú ±³·ùÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏÁö´Â ¾ÊÀº ½ºÆ®¸²ÀÇ ºÎ°¡ÀûÀÎ Á¾·ù¸¦ Á¤ÀÇ ÇÏ´Â ¹æ¹ýÀ» Á¦°øÇϰí ÀÖ´Ù.
½ºÆ®¸²ÀÇ ¾î¶² ŸÀÔÀº ÇÑ ¹®ÀÚ¿·ÎºÎÅÍ ÀÔ·ÂÀ» ÃëÇϰųª, ¹®ÀÚ¿¿¡ Ãâ·ÂÀ» ¾´´Ù. ½ºÆ®¸²ÀÇ ÀÌ·¯ÇÑ Á¾·ùµéÀº sprintf¿Í sscanf ÇÔ¼öµéÀ» À§ÇØ ³»ºÎÀûÀ¸·Î »ç¿ëµÇ¾îÁø´Ù. ´ç½ÅÀº ¶ÇÇÑ 7.18.1Àý [String Streams] 88ÆäÀÌÁö ¿¡¼ ¼³¸íÇϰí ÀÖ´Â ÇÔ¼öµéÀ» »ç¿ëÇØ¼, ¸í½ÃÀûÀ¸·Î ÀÌ·¯ÇÑ ½ºÆ®¸²À» ¸¸µé ¼ö ÀÖ ´Ù.
´õ ÀϹÝÀûÀ¸·Î, ´ç½ÅÀº ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼ Á¦°øµÇ´Â ÇÔ¼öµéÀ» »ç¿ëÇØ¼ ´Ù¾çÇÑ objects¿¡ ÀÔÃâ·ÂÀ» ÇàÇÏ´Â ½ºÆ®¸²µéÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÁ·ÎÅäÄÝÀº 7.18.3Àý [Custom Streams] 100ÆäÀÌÁö¿¡¼ ³íÀÇ µÇ°í ÀÖ´Ù.
ȣȯ¼º ³ëÆ® : ÀÌ Àý¿¡¼ ¼³¸íÇϰí ÀÖ´Â µµ±¸µéÀº GNU·Î Á¤ÇØÁø´Ù. ´Ù¸¥ ½Ã½ºÅÛÀ̳ª C ÀÛµ¿µéÀº µ¿µîÇÑ ÇÔ¼öµéÀ» Á¦°øÇϰųª, ȤÀº Á¦°øÇÏÁö ¾ÊÀ»¼ö ÀÖ´Ù.
7.18.1 ¹®ÀÚ¿ ½ºÆ®¸².
fmemopen °ú open_memstream ÇÔ¼öµéÀº ´ç½ÅÀÌ ¹®ÀÚ¿À̳ª ¸Þ¸ð¸® ¹öÆÛ·Î ÀÔÃâ·ÂÀ» ÇàÇÏ´Â °ÍÀ» Çã¿ëÇÏ´Â ÇÔ¼öÀÌ´Ù. ÀÌ µµ±¸µéÀº 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : FILE * fmemopen (void *buf, size_t size, const char *opentype)
ÀÌ ÇÔ¼ö´Â buf Àμö¿¡ ÀÇÇØ Á¤ÇØÁø ¹öÆÛ¿¡¼ Àаųª ¾²±â À§ÇØ, Á¤ÇØÁø opentype Àμö·Î ¾ï¼¼½º ÇÏ ´Â°É Çã¿ëÇÏ´Â ½ºÆ®¸²À» ¿¾îÁØ´Ù. ÀÌ ¹è¿Àº Àû¾îµµ long ¹ÙÀÌÆ®ÀÇ Å©±â¸¦ °¡Á®¾ß¸¸ ÇÑ´Ù.
¸¸ÀÏ ´ç½ÅÀÌ buf Àμö·Î ³Î Æ÷ÀÎÅ͸¦ Á¤Çϸé, fmemopenÀº long ¹ÙÀÌÆ® Å©±âÀÇ ¹è¿À» µ¿ÀûÀ¸·Î ÇÒ ´çÇÑ´Ù.( mallocÀ» »ç¿ëÇØ¼; 3.3Àý [Unconstrained Allocation] 22ÆäÀÌÁö ÂüÁ¶). À̰ÍÀº ¹öÆÛ¿¡ ¾î¶² °ÍÀ» ¾²°í³ª¼ ´Ù½Ã µÚ·Î°¡¼ ±×µéÀ» ÀÐÀ¸·ÁÇÒ ¶§ À¯¿ëÇÑ ÇÔ¼ö´Ù, ¿Ö³ÄÇÏ¸é ´ç½ÅÀº ¹öÆÛ·ÎºÎÅÍ Æ÷ÀÎ Å͸¦ ¾òÀ» ¼ö ÀÖ´Â ¾Æ¹«·± ¹æ¹ýÀ» °¡Áö°í ÀÖÁö ¾Ê±â ¶§¹®ÀÌ´Ù. (À̰ÍÀ» À§ÇØ, open_memstream, ¾Æ ·¡). ÀÌ ¹öÆÛ´Â ½ºÆ®¸²À» ¿¾úÀ» ¶§ freedµÈ´Ù. opentypeÀμö´Â fopen°ú °°´Ù( 7.3Àý [Opening Streams] 64ÆäÀÌÁö ÂýÁ¶) ¸¸ÀÏ opentypeÀÌ append ¸ðµå·Î Á¤ÇØÁø´Ù¸é, óÀ½ÀÇ ÆÄÀÏ À§Ä¡´Â ÆÄÀÏ¿¡¼
ù ¹øÂ° ³Î ¹®ÀÚ¿¡ À§Ä¡µÈ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ÆÄÀÏ Ã³À½ À§Ä¡´Â ¹öÆÛÀÇ ½ÃÀÛÁ¡ÀÌ´Ù.
¾²±âÀ§ÇØ °³¹æµÈ ½ºÆ®¸²ÀÌ Ç÷¯½¬(flushed-À§¿¡ ÀÌ °³³äÀÌ ÀÖ½À´Ï´Ù. È÷..)µÇ¾îÁö°Å³ª ´ÝÇôÁú ¶§, ³Î ¹®ÀÚ´Â( 0 ¹ÙÀÌÆ® ) ¸¸ÀÏ ±×°ÍÀÌ Àû´çÇÏ´Ù¸é ¹öÆÛÀÇ ³¡¿¡ ¾²¿©Áø´Ù. ´ç½ÅÀº À̰ÍÀ» ¼ÀÇϱâ À§Çؼ sizeÀμö¿¡ ¿©ºÐÀÇ ¹ÙÀÌÆ®¸¦ ´õÇÒ ¼ö ÀÖ´Ù. ¹öÆÛ¿¡ sizeº¸´Ù ´õ ¸¹ÀÌ ¾²±â¸¦ ½ÃµµÇÏ¸é ¿¡·¯ÀÇ °á°ú ¿¡ À̸¥´Ù.
Àбâ À§ÇØ °³¹æµÈ ½ºÆ®¸²¿¡¼, ¹öÆÛ¾ÈÀÇ ³Î ¹®ÀÚµéÀº(0 ¹ÙÀÌÆ®) "ÆÄÀÏÀÇ ³¡"À¸·Î °£ÁÖµÇÁö ¾Ê´Â´Ù. ÆÄÀÏÀÇ À§Ä¡°¡ size¸¦ ³Ñ°Ü ÁøÇàµÉ ¶§, ÆÄÀÏÀÇ ³¡ÀÓÀ» ÁöÀûÇÑ´Ù. ±×·¡¼ ´ç½ÅÀº ¸¸ÀÏ ´ç½ÅÀÌ ³Î Á¾·á ¹®ÀÚ·Î ³¡³ª´Â ¹®ÀÚ¿À» Àб⠿øÇÑ´Ù¸é, ´ç½ÅÀº sizeÀμö·Î ¹®ÀÚ¿ÀÇ ±æÀ̸¦ °ø±ÞÇØ¾ßÇÑ´Ù.
À̰÷¿¡ ¹®ÀÚ¿À» Àбâ À§ÇØ fmemopenÀ» »ç¿ëÇØ¼ ½ºÆ®¸²À»
¸¸µå´Â ¿¹°¡ ÀÖ´Ù.
#include <stdio.h>
static char buffer[] = "foobar";
int
main (void)
{
int ch;
FILE *stream;
stream = fmemopen (buffer, strlen (buffer), "r");
while ((ch = fgetc (stream)) != EOF)
printf ("Got %c\n", ch);
fclose (stream);
return 0;
}
ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº °á°ú¸¦ ³½´Ù.
Got f
Got o
Got o
Got b
Got a
Got r
/* ¿Ö ÀÌ·± °á°ú°¡ ³ª¿Ô´ÂÁö ¾Æ½ÃÁÒ? */
ÇÔ¼ö : FILE * open__memstream (char **ptr, size_t *sizeloc)
ÀÌ ÇÔ¼ö´Â ¹öÆÛ¿¡ ¾²±â À§ÇØ ½ºÆ®¸²À» ¿¬´Ù. ±× ¹öÆÛ´Â µ¿ÀûÀ¸·Î ÇÒ´çµÇ°í ( mallocÀ» »ç¿ëÇØ¼; 3.3Àý [Unconstrained Allocation] 22ÆäÀÌÁö ÂüÁ¶)Çʿ信 µû¶ó ´Ã¸°´Ù.
½ºÆ®¸²ÀÌ fclose¸¦ »ç¿ëÇÏ¿© ´ÝÈ÷°Å³ª, fflush¸¦ »ç¿ëÇÏ¿© Ç÷¯½¬µÉ ¶§ ptrÀÇ À§Ä¡¿Í sizeloc´Â ¹öÆÛÀÇ Æ÷ÀÎÅ͸¦ Æ÷ÇÔÇϰí ÀÖ´Â °÷°ú, ±× Å©±â·Î °»½ÅµÈ´Ù. ±× °ªÀº ½ºÆ®¸²¿¡ ±æÀ̸¸Å Ãâ·ÂÀ¸·Î ÀúÀåµÈ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ´õ Ãâ·ÂÇϱ⠿øÇÑ´Ù¸é, ´ç½ÅÀº ±×µéÀ» ´Ù½Ã »ç¿ëÇϱâ Àü¿¡ »õ·Î¿î °ªÀ» ÀúÀåÇϱâ À§ÇØ ¼ ½ºÆ®¸²À» Ç÷¯½¬(flush)ÇØ¾ßÇÑ´Ù.
³Î ¹®ÀÚ´Â ¹öÆÛÀÇ ³¡¿¡ ¾º¿©Áø´Ù. ÀÌ ³Î ¹®ÀÚ´Â sizeloc¿¡ ÀúÀåµÇ¾îÁø size°ª¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ´ç½ÅÀº fseek( 7.15Àý [File Positioning] 93 ÆäÀÌÁö ÂüÁ¶)¸¦ »ç¿ëÇÏ¿© ½ºÆ®¸²ÀÇ ÆÄÀÏ À§Ä¡(stream's file position)¸¦ ¿Å±æ¼ö ÀÖ´Ù. ÆÄÀÏ À§Ä¡¸¦ ÆÄÀÏÀÇ ³¡À» Áö³ª¼ ¿Å±â¸é ±× °ø¹éµéÀº ¿µÀ¸·Î(zeros) ä¿öÁ® ¾º¿©Áø´Ù.
À̰÷¿¡ open_memstreamÀ» »ç¿ëÇÑ ¿¹°¡ ÀÖ´Ù
#include <stdio.h>
int
main (void)
{
char *bp;
size_t size;
FILE *stream;
stream = open_memstream (&bp, &size);
fprintf (stream, "hello");
fflush (stream);
printf ("buf = %s, size = %d\n", bp, size);
fprintf (stream, ", world");
fclose (stream);
printf ("buf = %s, size = %d\n", bp, size);
return 0;
}
ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº °á°ú¸¦ ³½´Ù.
buf = `hello', size = 5
buf = `hello, world', size = 12
7.18.2 Obstack ½ºÆ®¸².
´ç½ÅÀº obstack¿¡ µ¥ÀÌÅ͸¦ ³Ö´Â Ãâ·Â ½ºÆ®¸²À» °³¹æÇÒ¼ö ÀÖ´Ù. 3.4Àý [Obstacks] 28ÆäÀÌÁö¸¦ ÂüÁ¶ÇÏ ¶ó.
ÇÔ¼ö : FILE * open__obstack__stream (struct obstack *obstack)
ÀÌ ÇÔ¼ö´Â obstack¿¡ µ¥ÀÌÅ͸¦ ¾²±âÀ§ÇØ ½ºÆ®¸²À» °³¹æÇÑ´Ù. À̰ÍÀº obstack¾È¿¡¼ object¸¦ ½ÃÀÛÇÏ °í, ¾º¿©Áø µ¥ÀÌÅÍ¿¡ µû¶ó ´Ã·Á¼ ¸¸µç´Ù. ( 3.4.6Àý [Growing Objects] 31ÆäÀÌÁö ÂüÁ¶)
ÀÌ ½ºÆ®¸²»ó¿¡¼ fflush¸¦ È£ÃâÇÏ¸é ¾º¿©Áø µ¥ÀÌÅÍÀÇ ¾ç¿¡ ¸ÂÃß¾î¼ objectÀÇ ÇöÀçÀÇ Å©±â¸¦ °»½ÅÇÑ ´Ù. fflush¸¦ È£ÃâÇÑ ÈÄ¿¡, ´ç½ÅÀº ÀϽÃÀûÀ¸·Î object¸¦ ½ÃÇèÇÒ ¼ö ÀÖ´Ù.
´ç½ÅÀº fseek(7.15Àý [File Positioning] 93ÆäÀÌÁö ÂüÁ¶)¸¦ »ç¿ëÇÏ¿© obstack ½ºÆ®¸²ÀÇ ÆÄÀÏ À§Ä¡¸¦ ¿Å ±æ ¼ö ÀÖ´Ù. ÆÄÀÏÀÇ ³¡À» Áö³°÷À¸·Î ÆÄÀÏ À§Ä¡¸¦ ¿Å±â¸é ¿µ(0)À¸·Î °ø¹éµéÀÌ Ã¤¿ö ÀúÀåµÈ´Ù.
º¯ÇÏÁö ¾Ê´Â object¸¦ ¸¸µé·Á¸é, fflush¸¦ »ç¿ëÇÏ¿© obstack¸¦ °»½ÅÇϰí, ±×´ÙÀ½ object¸¦ °á¸»Áþ±â À§ ÇØ obstack_finish¸¦ »ç¿ëÇϰí, ±× ÁÖ¼Ò¸¦ ¾ò¾î¶ó. ±× ½ºÆ®¸²¿¡ ¾´ ´ÙÀ½¿¡ obstack¿¡ »õ·Î¿î object¸¦ ½ÃÀÛÇÏ¸é ´ç½ÅÀÌ ´Ù¸¥ fflush¿Í obstack_finish¸¦ »ç¿ëÇÏ¿© ±× object¿¡ ´õÇÏ¿© ¾µ¼ö ÀÖ´Ù.
±×·¯³ª ´ç½ÅÀÌ objectÀÇ ±æÀ̰¡ ¾ó¸¶ÀÎÁö ¾î¶»°Ô ¾Ë°ÍÀΰ¡? ´ç½ÅÀº obstack_object_size( 3.4.8Àý [Status of an Obstack] 33ÆäÀÌÁö ÂüÁ¶)¸¦ È£ÃâÇÔÀ¸·Î½á ¹ÙÀÌÆ® ´ÜÀ§·Î ±× ±æÀ̸¦ ¾òÀ» ¼ö Àְųª À̿Ͱ°ÀÌ object¸¦ ³Î Á¾·á ½Ãų ¼ö ÀÖ´Ù.
obstack_1grow (obstack, 0);
´ç½ÅÀÌ ¹«¾ùÀ» ÇÏ´ø Áö°£¿¡, obstack_finish¸¦ È£ÃâÇϱâ Àü¿¡ ±×°ÍÀ» ÇØ¾ß ÇÑ´Ù. ( ´ç½ÅÀÌ ¿øÇÏ¸é ¾ç ÂÊ ´Ù ÇÒ ¼ö ÀÖ´Ù.)
¿©±â¿¡ open_obstck_stream ÇÔ¼öÀÇ ¿¹Á¦°¡ ÀÖ´Ù.
char *make_message_string (const char *a, int b)
{
FILE *stream = open_obstack_stream (&message_obstack);
output_task (stream);
fprintf (stream, ": ");
fprintf (stream, a, b);
fprintf (stream, "\n");
fclose (stream);
obstack_1grow (&message_obstack, 0);
return obstack_finish (&message_obstack);
}
7.18.3 ÇÁ·Î±×·¡¹ÖÇÑ ´ç½Å ÀڽŸ¸ÀÇ ÁÖ¹® ½ºÆ®¸².
ÀÌ ÀýÀº ´Ù¾çÇÑ µ¥ÀÌÅÍ ¼Ò½º·ÎºÎÅÍ ÀÔ·ÂÀ» ¾ò´Â ½ºÆ®¸²À̳ª, ´ç½Å¿¡ ÀÇÇØ ÇÁ·Î±×·¥µÈ ´Ù¾çÇÑ µ¥ÀÌÅÍ ÀúÀå°í(sink)¿¡ Ãâ·ÂÀ» ¾²´Â ½ºÆ®¸²À» ¾î¶»°Ô ¸¸µé ¼ö ÀÖ´ÂÁö¿¡ ´ëÇÑ ¼³¸íÀÌ ÀÖ´Ù. ¿ì¸®´Â À̰ÍÀ» ÁÖ¹®(custom) ½ºÆ®¸²À̶ó°í ºÎ¸¥´Ù.
7.18.3.1 ÁÖ¹® ½ºÆ®¸²°ú Cookies
¸ðµç ÁÖ¹® ½ºÆ®¸² ³»ºÎ¿¡´Â cookie¶ó°í ºÒ¸®´Â Ưº°ÇÑ object°¡ ÀÖ´Ù. À̰ÍÀº Àаųª ¾´ µ¥ÀÌÅ͸¦ Ãß ÃâÇϰųª ÀúÀåÇϱâ À§ÇÑ ·¹ÄÚµåµé·Î ´ç½Å¿¡ ÀÇÇØ Á¦°øµÇ´Â ¿ÀºêÁ§Æ®ÀÌ´Ù. ´ç½Å¿¡°Ô cookie¿¡ »ç¿ë µÉ µ¥ÀÌÅÍ Å¸ÀÔÀ» Á¤ÀÇÇϵµ·Ï ÇÑ´Ù. ¶óÀ̺귯¸® ¾ÈÀÇ ½ºÆ®¸² ÇÔ¼öµéÀº °áÄÚ ±× ¾ÈÀÇ ³»¿ëÀ» Á÷Á¢Àû À¸·Î ÂüÁ¶ÇÏÁö ¾Ê°í, ±×µéÀº ½ÉÁö¾î ±×°ÍÀÌ ¹«½¼ ŸÀÔÀÎÁö ¾ËÁö ¸øÇÑ´Ù; ±×µé ·¹ÄÚµåÀÇ ÁÖ¼Ò´Â void * ŸÀÔÀ¸·Î ÀúÀåµÇ¾î ÀÖ´Ù.
ÁÖ¹® ½ºÆ®¸²À» µµ±¸·Î ÇÏ·Á¸é, ´ç½ÅÀº Á¤ÇØÁø À§Ä¡¿¡ µ¥ÀÌÅ͸¦ ¾î¶»°Ô ÀúÀåÇϰųª, ÃßÃâÇÒ °ÍÀÎÁö Á¤ÇØÁà¾ß¸¸ ÇÑ´Ù. ´ç½ÅÀº Àаųª ¾²°Å³ª, "ÆÄÀÏ À§Ä¡"¸¦ º¯°æÇϰųª, ½ºÆ®¸²À» ´Ý°Å³ª ÇÏ´Â ÈÄÅ© (hook) ÇÔ¼öµéÀ» Á¤ÀÇÇÔÀ¸·Î½á À̰ÍÀ» ÇÑ´Ù. ÀÌ ³× °³ÀÇ ÇÔ¼öµé¿¡ ½ºÆ®¸² cookie°¡ Àü´ÞµÇ¾îÁö¸é ±×µéÀº ÃßÃâÇϰųª ÀúÀåÇÒ µ¥ÀÌÅÍÀÇ À§Ä¡¸¦ ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù. ¶óÀ̺귯¸® ÇÔ¼ö´Â cookie¾È¿¡ ¹«¾ùÀÌ ÀÖ´ÂÁö ¾ËÁö ¸øÇÏÁö¸¸, ´ç½ÅÀÇ ÇÔ¼öµéÀº ¾Ë °ÍÀÌ´Ù.
´ç½ÅÀÌ ÁÖ¹® ½ºÆ®¸²À» ¸¸µé ¶§, ´ç½ÅÀº cookie Æ÷ÀÎÅ͸¦ Á¤ÇØ ÁÖ¾î¾ß¸¸Çϰí, ¶ÇÇÑ ³× °³ÀÇ ÈÄÅ© ÇÔ¼ö µéÀº struct cookie_io_functionsÀÇ Å¸ÀÔÀ¸·Î ±¸Á¶Ã¼ ¾È¿¡ ÀúÀåÇÑ´Ù.
ÀÌ µµ±¸µéÀº 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : struct cookie__io__functions
À̰ÍÀº ½ºÆ®¸²°ú cookie »çÀÌÀÇ Åë½Å ÇÁ·ÎÅäÄÝÀ» Á¤ÀÇÇÏ´Â ÇÔ¼ö¸¦ À¯ÁöÇϱâ À§ÇÑ ±¸Á¶Ã¼ ŸÀÔÀÌ´Ù. ´ÙÀ½°ú °°Àº ¸â¹ö¸¦ °¡Áö°í ÀÖ´Ù.
cookie_read_function *read
À̰ÍÀº cookie·ÎºÎÅÍ µ¥ÀÌÅ͸¦ Àбâ À§ÇÑ ÇÔ¼öÀÌ´Ù. ¸¸¾à ±× °ªÀÌ ÇÔ¼ö ´ë½Å¿¡ ³Î Æ÷ÀÎÅͶó¸é, ½º Æ®¸²»ó¿¡¼ Àб⠵¿ÀÛµéÀº Ç×»ó EOF¸¦ ¸®ÅÏÇÑ´Ù.
cookie_write_function *write
À̰ÍÀº cookie¿¡ µ¥ÀÌÅ͸¦ ¾²±â À§ÇÑ ÇÔ¼öÀÌ´Ù. ¸¸¾à ±× °ªÀÌ ÇÔ¼ö´ë½Å¿¡ ³Î Æ÷ÀÎÅͶó¸é, ½ºÆ®¸²¿¡ ¾²¿©Áø µ¥ÀÌÅÍ´Â ¹ö·ÁÁø´Ù.
cookie_seek_function *seek
À̰ÍÀº cookie¿¡ ÆÄÀÏ À§Ä¡½Ã۱â¿Í °°Àº µ¿ÀÛµéÀ» ¼öÇàÇÏ´Â ÇÔ¼öÀÌ´Ù. ¸¸¾à ±× °ªÀÌ ÇÔ¼ö´ë½Å¿¡ ³Î Æ÷ÀÎÅͶó¸é, ÀÌ ½ºÆ®¸²¿¡¼ fseek¸¦ È£ÃâÇϸé, ¿ÀÁ÷ ¹öÆÛ ¾ÈÀÇ À§Ä¡¸¸ ãÀ» ¼ö ÀÖ´Ù; ¹öÆÛÀÇ ¹Û¿¡¼ ãÀ¸·Á´Â ¾î¶² ½Ãµµ´Â ESPIPE ¿¡·¯¸¦ ¸®ÅÏÇÒ °ÍÀÌ´Ù.
cookie_close_function *close
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸²ÀÌ ´ÝÈú ¶§ cookie¿¡ Àû´çÇÑ Á¤¸®ÀÛ¾÷À» ¼öÇàÇÑ´Ù. ¸¸¾à ±× °ªÀÌ ÇÔ¼ö´ë½Å¿¡ ³Î Æ÷ ÀÎÅͶó¸é, ½ºÆ®¸²ÀÌ ´ÝÈú ¶§ ¾î¶² Ưº°ÇÑ ÀÏÀ» ÇàÇÔÀÌ ¾øÀÌ cookie¸¦ ´Ý´Â´Ù.
ÇÔ¼ö :
FILE * fopencookie (void *cookie, const char *opentype, struct cookie_functions io_functions)
ÀÌ ÇÔ¼ö´Â io_functions Àμö ¾È¿¡ ÀÖ´Â ±× ÇÔ¼öµéÀ» »ç¿ëÇØ¼ cookie¿Í Åë½ÅÇϱâ À§ÇÑ ½ºÆ®¸²À» ½Ç Á¦·Î »ý¼ºÇÑ´Ù. opentype Àμö´Â fopen¿¡¼ »ç¿ëµÇ´Â °Í°ú °°´Ù; 7.3Àý [Opening Stream], 64ÆäÀÌÁö ¸¦ ÂüÁ¶Ç϶ó. ( ÇÏÁö¸¸ "truncate on open" ¿É¼ÇÀº ¹«½ÃµÊÀ» ±â¾ïÇ϶ó. »õ·Î¿î ½ºÆ®¸²Àº ¿ÏÀüÈ÷ ¹ö ÆÛ µÈ´Ù. fopencookie ÇÔ¼ö´Â »õ·ÎÀÌ »ý¼ºµÈ ½ºÆ®¸²À» ¸®ÅÏ Çϰųª, ¾Æ´Ï¸é ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì¿¡ ³Î Æ÷ÀÎÅ͸¦ ¸®ÅÏ ÇÑ´Ù.
7.18.3.2 ÁÖ¹® ½ºÆ®¸² ÈÄÅ© ÇÔ¼öµé
ÁÖ¹® ½ºÆ®¸²ÀÌ ÇÊ¿ä·Î ÇÏ´Â ³× °³ÀÇ ÈÄÅ© ÇÔ¼öµéÀ» Á¤ÀÇÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù.
´ç½ÅÀº cookie·ÎºÎÅÍ µ¥ÀÌÅ͸¦ Àбâ À§ÇÑ ÇÔ¼ö¸¦ ´ÙÀ½Ã³·³ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
ssize_t reader (void *cookie, void *buffer, size_t size)
À̰ÍÀº read ÇÔ¼ö¿Í ¸Å¿ì À¯»çÇÏ´Ù; 8.2Àý [I/O Primitives] 105 ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó. ´ç½ÅÀÇ ÇÔ¼ö´Â ¹öÆÛ ¾È¿¡¼ size ¹ÙÀÌÆ®¸¦ ÂüÁ¶Çϰí, ÀÐÀº ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ ¸®ÅÏ Çϰųª, ¾Æ´Ï¸é end-of-fileÀ» Áö½Ã Çϱâ À§ÇØ 0À» ¸®ÅÏ ÇÑ´Ù. ´ç½ÅÀº ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì¿¡ -1ÀÇ °ªÀ» ¸®ÅÏÇÒ ¼ö ÀÖ´Ù.
´ç½ÅÀº cookie¿¡ µ¥ÀÌÅ͸¦ ¾²±â À§ÇÑ ÇÔ¼ö¸¦ ´ÙÀ½Ã³·³ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
ssize_t writer (void *cookie, const void *buffer, size_t size)
À̰ÍÀº writeÇÔ¼ö¿Í ¸Å¿ì À¯»çÇÏ´Ù; 8.2Àý [I/O Primitives], 105ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó. ´ç½ÅÀÇ ÇÔ¼ö´Â ¹öÆÛ·ÎºÎÅÍ size ¹ÙÀÌÆ®¸¦ ÂüÁ¶Çϰí, ¾º¾îÁø ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ ¸®ÅÏ ÇÑ´Ù. ´ç½ÅÀº ¿¡·¯¸¦ ÁöÀûÇϱâ À§ ÇØ -1ÀÇ °ªÀ» ¸®ÅÏÇÒ ¼ö ÀÖ´Ù.
´ç½ÅÀº cookie¿¡ °Ë»ö ¸í·ÉÀ» ¼öÇàÇϱâ À§ÇÑ ÇÔ¼ö¸¦ ´ÙÀ½Ã³·³ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
int seeker (void *cookie, fpos_t *position, int whence)
ÀÌ ÇÔ¼ö¿¡¼, position°ú whence ÀμöµéÀº fgetposó·³ ÇØ¼®µÇ¾îÁø´Ù; 7.16Àý [Portable Positiong], 94 ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó. GNU ¶óÀ̺귯¸®¿¡¼´Â, fpos_t ŸÀÔÀº off-t³ª long int¿Í µ¿µîÇϰí, ÆÄÀÏÀÇ ½Ã ÀÛÁ¡À¸·Î ºÎÅÍ ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ Ç¥ÇöÇÑ´Ù. °Ë»ö ¿ÀÆÛ·¹À̼ÇÀÌ ½ÇÇàµÈ ÀÌÈÄ, ´ç½ÅÀÇ ÇÔ¼ö´Â ÆÄÀÏÀÇ ½ÃÀÛ Á¡À» ±âÁØÀ¸·Î ÇÑ ÆÄÀÏÀÇ À§Ä¡¸¦ °á°ú·Î ÇÏ¿© ÀúÀåÇÒ °ÍÀÌ´Ù. ´ç½ÅÀÇ ÇÔ¼ö´Â ¼º°øÇϸé 0À» ¸®ÅÏÇÏ °í, ¾Æ´Ï¸é ½ÇÆÐÀÏ °æ¿ì -1À» ¸®ÅÏ ÇÑ´Ù.
´ç½ÅÀº ½ºÆ®¸²À» ´ÝÀ» °æ¿ì cookie¿¡ Àû´çÇÑ ¸í·ÉÀ» ÁÖ¾î¼ Á¤¸® ÀÛ¾÷(cleanup)À» Çϱâ À§ÇÑ ÇÔ¼ö¸¦ ´ÙÀ½Ã³·³ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
int cleaner (void *cookie)
´ç½ÅÀÇ ÇÔ¼ö´Â ¼º°øÇϸé 0, ±×·¸Áö ¾ÊÀ¸¸é ¿¡·¯¸¦ ÁöÀûÇϱâ À§ÇØ -1À» ¸®ÅÏ ÇÑ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : cookie __read__function
À̰ÍÀº ÁÖ¹® ½ºÆ®¸²À» À§ÇÑ Àбâ ÇÔ¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ À§¿¡ º¸¿©ÁØ °Íó·³ ÇÔ¼ö¸¦ ¼±¾ðÇϸé, ±×¶§ ±× ÇÔ¼ö°¡ °®´Â µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : cookie__write__function
ÁÖ¹® ½ºÆ®¸²À» À§ÇÑ ¾²±â ÇÔ¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔ
µ¥ÀÌÅÍ Å¸ÀÔ : cookie__seek__function
ÁÖ¹® ½ºÆ®¸²À» À§ÇÑ °Ë»ö ÇÔ¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔ.
µ¥ÀÌÅÍ Å¸ÀÔ : cookie__close__function
ÁÖ¹® ½ºÆ®¸²À» À§ÇÑ Á¾·á ÇÔ¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔ