Joinc¿Í ÇÔ²²ÇÏ´Â ¸®´ª½º ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö 3Àå ÀԷ°ú Ãâ·Â
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.


Contents

1 ¼Ò°³
2 ¸ðµç°Ç ÆÄÀÏÀÌ´Ù
3 ÆÄÀÏÀÇ Á¾·ù
4 ÆÄÀÏ ¿­±â
4.1 open ½Ã½ºÅÛÄÝÀ» ÀÌ¿ëÇÑ ÆÄÀÏ ¿­±â
4.2 file descriptor
5 ÆÄÀÏ¿¡¼­ Àбâ
5.1 read ½Ã½ºÅÛÄÝ
5.2 ¹öÆÛ°ø°£ÀÇ Å©±â
6 ÆÄÀÏ¿¡ ¾²±â
7 ÆÄÀÏ ´Ý±â
8 ¿ø½Ã µ¥ÀÌÅÍŸÀÔÀÇ µ¥ÀÌÅÍ¿Í ±¸Á¶Ã¼µ¥ÀÌÅÍ ÀÐ°í ¾²±â
8.1 Á»´õ º¹ÀâÇÑ ±¸Á¶Ã¼ µ¥ÀÌÅÍ ÀÐ°í ¾²±â
9 ÆÄÀÏÀÇ ±ÇÇѰú ¸ðµå
10 ÆÄÀÏÀÇ Á¾·ù¿Í ±ÇÇÑ,¸ðµå ¾Ë¾Æ³»±â
10.1 hard link¿Í symbolic link
10.2 hard link
11 ½Éº¼¸¯ ¸µÅ©
12 Ç¥ÁØÀԷ ǥÁØÃâ·Â Ç¥ÁØ¿¡·¯
13 ÀÔÃâ·Â ÀçÁöÇâ
14 ÀÔÃâ·Â ¹öÆÛ ºñ¿ì±â
15 »ç¿ëÇÑ ÇÔ¼öµé Á¤¸®

1 ¼Ò°³

±â°è´Â Á¶ÀÛÀÚÀÇ ÀÔ·ÂÀ» ¹Þ¾Æ¼­, ÇÁ·Î±×·¡¹Ö µÈµ¥·Î ÀÏÀ» ÇÏ°í ±× °á°ú¹°À» Ãâ·ÂÇÑ´Ù. ¹Í¼­±â´Â »ç°ú¸¦ ÀÔ·Â¹Þ°í ¹öưÀ» ´©¸£¸é, ÇÁ·Î±×·¡¹Ö µÈµ¥·Î ¸ðÅ͸¦ µ¹·Á¼­ »ç°ú¸¦ Àß°³ Âɰ³°í ±× °á°ú¹°·Î »ç°úÁ꽺¸¦ Ãâ·ÂÇÑ´Ù.

ÄÄÇ»ÅÍ´Â Á¤º¸¸¦ ó¸®Çϱâ À§ÇÑ ±â°è·Î ÀÔ·ÂÀ» ¹Þ¾Æ¼­ ó¸®ÇÏ°í ±× °á°ú¸¦ Ãâ·ÂÇÑ´Ù´Â Á¡¿¡¼­ ºÃÀ» ¶§, ±Ùº»ÀûÀ¸·Î ¹Í¼­¿Í ´Ù¸¦ ¹Ù°¡ ¾ø´Ù. ¹Í¼­¿Í ´Ù¸¥ Á¡À̶ó¸é ÀÔ·ÂÀ¸·Î »ç°ú ´ë½Å (ºñÆ®·Î ÀÌ·ç¾îÁø)Á¤º¸¸¦ ÀԷ¹޾Ƽ­ ó¸®ÇÏ°í ±× °á°ú¹°·Î Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù´Â Á¡ Á¤µµÀÏ °ÍÀÌ´Ù.

¿©·¯ºÐÀº ÀÌ¹Ì ÄÄÇ»ÅÍ ½Ã½ºÅÛÀº Űº¸µå¸¦ ÅëÇØ¼­ µ¥ÀÌÅ͸¦ ÀԷ¹޾Ƽ­ ÇÁ·Î±×·¥¿¡ ³Ñ°Ü¼­ ó¸®ÇÏ°í ±× °á°ú¹°À» ¸ð´ÏÅÍ·Î Ãâ·ÂÇϰí ÀÖ´Ù´Â °ÍÀ» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ó¸®ÇϰíÀÚ ÇÏ´Â µ¥ÀÌÅÍÀÇ Á¾·ù¿¡ µû¶ó¼­ ÀԷ±â±â°¡ ¸¶¿ì½º³ª ÆÒ, ÅÍÄ¡½ºÅ©¸°ÀÌ µÈ°í, Ãâ·Â±â±â ¿ª½Ã ÆÄÀÏ, ÇÁ¸°ÅÍ, Å×ÀÌÇÁ µîÀÌ µÇ±âµµ ÇÒ °ÍÀÌ´Ù.

system2_2.png

À̹øÀå¿¡¼­´Â ÄÄÇ»ÅÍ ½Ã½ºÅÛ¿¡¼­ÀÇ ÀԷ°ú Ãâ·ÂÀ» Á¦¾îÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¼ °ÍÀÌ´Ù.

2 ¸ðµç°Ç ÆÄÀÏÀÌ´Ù

À¯´Ð½º¿¡¼­´Â ¸ðµç°É ÆÄÀÏ·Î Ãë±ÞÇÑ´Ù. Çϵåµð½ºÅ©¿¡ Á¸ÀçÇÏ´Â ÆÄÀÏ, µð·ºÅ丮´Â ¹°·ÐÀÌ°í ³×Æ®¿öũīµå, »ç¿îµåÄ«µå, Űº¸µå, ¸¶¿ì½º, Çϵåµð½ºÅ© ±× ÀÚü ±îÁö ¸ù¶¥ ÆÄÀÏ·Î Ãë±ÞÇÑ´Ù.

À¯´Ð½º ½Ã½ºÅÛÀ» óÀ½ Á¢ÇÒ¶§ ²Ï³ª È¥µ¿µÇ´Â ºÎºÐÀ̱⵵ ÇÏ´Ù. À©µµ¿ì¿¡´Â ÆÄÀÏÀº ´ÜÁö Çϵåµð½ºÅ©»ó¿¡ Á¸ÀçÇÏ´Â ³í¸®ÀûÀÎ Á¤º¸ÀÇ ÁýÇÕÀ» ±× ´ë»óÀ¸·Î Çϱ⠶§¹®ÀÌ´Ù. ¿¹¸¦ µéÀÚ¸é Çϵåµð½ºÅ©´Â C: D:¿Í °°Àº ÆÄÀÏÀÌ ¾Æ´Ñ ÀåÄ¡·Î ÀνÄÇÑ´Ù.

±×·¯³ª À¯´Ð½º ½Ã½ºÅÛ¿¡¼­´Â ÀåÄ¡µµ ÆÄÀÏ·Î Ãë±ÞµÈ´Ù. ¸®´ª½ºµµ À¯´Ð½º¿Í µ¿ÀÏÇÑ ÆÄÀϽýºÅÛÀ» °¡Áö°í ÀÖÀ¸¹Ç·Î, ¸®´ª½º¸¦ ¿¹·Î µé¾î¼­ ¼³¸íÇϰڴÙ. ¸®´ª½º¿¡¼­ Çϵåµð½ºÅ©´Â /dev/hda1, /dev/hda2 ÀÌ·±½ÄÀ¸·Î Çϵåµð½ºÅ©»óÀÇ ÆÄÀÏ·Î Á¸ÀçÇÑ´Ù. »Ó¸¸ ¾Æ´Ï´Ù. »ç¿îµå Ä«µå´Â /dev/dsp, ÇÁ¸°Æ®´Â /dev/lp, cdromÀº /dev/cdrom ÀÇ À̸§À» °¡Áø ÆÄÀÏ·Î Á¸ÀçÇÑ´Ù.

ÀϹݻç¿ëÀÚÀÇ ÀÔÀå¿¡¼­ ÀåÄ¡¸¦ ÆÄÀÏ·Î ÀνÄÇÏ´Â°Ç ºÒÇÕ¸®ÇØ º¸ÀÏ ¼ö ÀÖ´Ù. ±×·¯³ª °³¹ßÀÚ ÀÔÀå¿¡¼­´Â ¸Å¿ìÇÕ¸®ÀûÀÎ ¹æ¹ýÀÌ´Ù. ¸ðµç ÀåÄ¡¶ó´Â °ÍÀº ÀÔ·ÂÀ» ¹Þ¾Æµé¿©¼­ Ãâ·ÂÇÏ´Â ¸ÅÄ¿´ÏÁòÀ» °¡Áö´Âµ¥, ÀÌ´Â ÆÄÀÏÀÇ ¸ÅÄ¿´ÏÁò°ú ¿ÏÀüÈ÷ µ¿ÀÏÇϱ⠶§¹®À¸·Î ÆÄÀÏÀ» ´Ù·ç´Â °Í°ú µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î ´Ù¸¥ ÀåÄ¡µéµµ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ÅëÀÏÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. »ç¿îµåÄ«µå¸¦ ¿¹·Î µç´Ù¸é, test.wav ÆÄÀÏÀ» Àо /dev/dsp¿¡ ¾´´Ù´Â ½ÄÀ¸·Î »ç¿îµå¸¦ Ç÷¹ÀÌÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦·Î ÇÁ·Î±×·¡¹Ö ÇÒ¶§µµ ÀÏ¹Ý ÆÄÀÏÀ» ÀÐ°í ¾²´Â °Íó·³ ÀåÄ¡µé¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ÀÏ¹Ý ÆÄÀϵ鿡 ÀÐ°í ¾²´Â °Íº¸´Ù´Â ¾à°£ º¹ÀâÇϱä ÇÏÁö¸¸ ¿ø¸®ÀûÀ¸·Î´Â µ¿ÀÏÇÏ´Ù.

system2.png

°á±¹ ÇÁ·Î±×·¡¸Ó´Â º¹ÀâÇÑ ÀåÄ¡Á¦¾î¿Í °ü·ÃµÈ ÇнÀÀ» ÃÖ¼ÒÈ­ Çϸ鼭, ÆÄÀÏÀ» »ç¿ëÇÏ´Â °Íó·³ ¿©·¯ ÀåÄ¡µéÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

3 ÆÄÀÏÀÇ Á¾·ù

À§¿¡¼­ ¿¹»óÇß°ÚÁö¸¸ ÆÄÀÏÀ̶ó°í ÇØ¼­ ´Ù °°Àº ÆÄÀÏÀº ¾Æ´Ï´Ù. ÀϹÝÀûÀ¸·Î ¾Ë°í ÀÖ´Â ºñÆ® µ¥ÀÌÅ͸¦ ÀúÀåÇÑ ÆÄÀÏÀÌ Àִ°¡ Çϸé, ÀåÄ¡¿Í ´ëÀÀµÇ´Â ÆÄÀϵµ ÀÖ´Ù. ³»ºÎÅë½Å°ú ¿ÜºÎÅë½ÅÀ» ÀÌ¿ëÇØ¼­ »ç¿ëµÇ´Â ¼ÒÄÏÆÄÀÏ - ¸®´ª½º´Â ³×Æ®¿öÅ© Åë½Åµµ ÆÄÀÏÀ» ÅëÇØ¼­ ÇÑ´Ù - ÆÄÀÌÇÁ¿Í ´ëÀÀµÇ´Â ÆÄÀÏ, µð·ºÅ丮¿Í ´ëÀÀµÇ´Â ÆÄÀϵîÀÌ ÀÖ´Ù. ¿¹ÄÁµ¥ ¸ðµç°ÍÀÌ ÆÄÀÏÀÌ´Ù.

¸®´ª½º¿¡¼­´Â ls ¸í·ÉÀ» ÀÌ¿ëÇØ¼­ ÀÌ·¯ÇÑ ÆÄÀÏÀÇ Á¾·ù¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.
# ls -al 
drwxr-xr-x 12 root root       13820 2007-11-12 22:19 . 
drwxr-xr-x 21 root root        4096 2007-10-31 23:47 .. 
drwxr-xr-x  2 root root         100 2007-11-13 06:45 .initramfs 
-rw-r--r--  1 root root           0 2007-11-13 06:45 .initramfs-tools 
drwxr-xr-x  3 root root          60 2007-11-13 06:45 .static 
drwxr-xr-x  5 root root         120 2007-11-12 22:19 .udev 
lrwxrwxrwx  1 root root          13 2007-11-13 06:45 MAKEDEV -> /sbin/MAKEDEV 
crw-rw----  1 root root     10,  63 2007-11-12 21:46 acpi 
crw-rw----  1 root audio    14,  12 2007-11-12 21:46 adsp 
crw-rw----  1 root audio    14,   4 2007-11-12 21:46 audio 
drwxr-xr-x  3 root root          60 2007-11-13 06:45 bus 
lrwxrwxrwx  1 root root           3 2007-11-13 06:45 cdrom -> hda 
 
ls ÀÇ °¡Àå ¾Õ ÇʵåÀÇ Ã¹¹®ÀÚ°¡ ÆÄÀÏÀÇ Á¾·ù¸¦ ³ªÅ¸³½´Ù. ¾Æ·¡´Â ls ¸¦ ÅëÇØ¼­ ¾Ë¾Æ³¾ ¼ö ÀÖ´Â ÆÄÀÏÀÇ Á¾·ùÀÌ´Ù. ÆÄÀϵéÀº ¾Æ·¡ÀÇ Á¾·ùÁß Çϳª¿¡ Æ÷ÇԵȴÙ. pipe, ¸µÅ©, ¼ÒÄÏ µî¿¡´ëÇØ¼­´Â ³ªÁß¿¡ ÀÚ¼¼È÷ ¾ð±ÞÇÒ °ÍÀÌ´Ù. ¿ì¼±Àº ¾Æ·¡¿Í °°Àº ´Ù¾çÇÑ Á¾·ùÀÇ ÆÄÀÏÀÌ ÀÖ´Ù´Â °Í¸¸ ÀÌÇØÇÏ°í ³Ñ¾î°¡µµ·Ï ÇÏÀÚ.
- ÀÏ¹Ý ÆÄÀÏ txt, jpg, wav, pdf...
d µð·ºÅ丮
l ¸µÅ© ½Éº¼¸¯ ¸µÅ©, ȤÀº Çϵ帵ũ
c ÀåÄ¡ ÇÁ¸°ÅÍ, »ç¿îµåÄ«µå, cdrom µîÀÇ ÀåÄ¡
s ¼ÒÄÏ ÇÁ·Î¼¼½º°£ Åë½Å¿¡ »ç¿ë
p pipe ÆÄÀÌÇÁ

4 ÆÄÀÏ ¿­±â

ÆÄÀÏÀ» ´Ù·ç´Â ±âº»ÀûÀÎ È帧Àº ´ÙÀ½°ú °°´Ù.
  1. ÆÄÀÏÀ» ¿¬´Ù.
  2. ¿­·ÁÁø ÆÄÀÏ¿¡¼­ µ¥ÀÌÅ͸¦ Àаųª, µ¥ÀÌÅ͸¦ ¾´´Ù
  3. ¸ðµç ÀÛ¾÷ÀÌ ³¡³µ´Ù¸é, ÆÄÀÏÀ» ´Ý´Â´Ù.

°¡Àå ¸ÕÀú ÇØ¾ßÇÒÀÏÀÌ ÆÄÀÏÀ» open(¿©´Â)°ÍÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. À̰ÍÀº Ä¿³Î¿¡°Ô ÆÄÀÏÀ» °¡Áö°í ÀÛ¾÷ÇÒ ¼ö ÀÖµµ·Ï ¿äûÇÏ´Â °ÍÀ¸·Î, Ä¿³ÎÀº ¿©·¯°¡Áö Á¶°ÇÀ» ÆÇ´ÜÇØ¼­ ÆÄÀÏÀ» ¿ÀÇÂÇØ ÁÙ°ÍÀÎÁö ¾Æ´ÑÁö¸¦ °áÁ¤ÇÏ°í ±× °á°ú¸¦ ¸®ÅÏÇÑ´Ù. °á°ú´Â openÀ» ¿äûÇÑ ÇÁ·Î¼¼½º¿¡°Ô µÇµ¹·ÁÁö°Ô µÈ´Ù.

ÆÄÀÏÀ» ¿ÀÇÂÇØ ÁÙ°ÍÀÎÁö ¾Æ´ÑÁö¸¦ °áÁ¤ÇÏ´Â µ¥¿¡´Â ´ÙÀ½°ú °°Àº ÀÌÀ¯°¡ ÀÖ´Ù.
  1. ½ÇÁ¦·Î Á¸ÀçÇÏ´Â ÆÄÀÏÀÎÁö ¾Æ´ÑÁö È®ÀÎ
  2. Á¸ÀçÇÏÁö ¾ÊÀ» °æ¿ì ÆÄÀÏÀ» »õ·Î »ý¼ºÇÒ °ÍÀÎÁö ¾Æ´ÑÁö¸¦ °áÁ¤
  3. ÆÄÀÏÀ» ¾µ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎ
    ¸®´ª½º´Â ´ÙÁß »ç¿ëÀÚ ¿î¿µÃ¼Á¦·Î ÆÄÀÏÀ» ºñ·ÔÇÑ ¸ðµç ÀÚ¿ø¿¡ ´ëÇÑ Á¢±Ù ±ÇÇÑÀÌ ¼³Á¤µÇ¾î ÀÖ´Ù. µû¶ó¼­ ÇØ´ç ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇÏ´Â °ÍÀº ´ç¿¬ÇÑ ÀýÂ÷´Ù.

4.1 open ½Ã½ºÅÛÄÝÀ» ÀÌ¿ëÇÑ ÆÄÀÏ ¿­±â

ÆÄÀÏ ÀÛ¾÷À» Çϱâ·Î ¸¶À½À» ¸Ô¾ú´Ù¸é, Ä¿³Î¿¡ Á¤ÇØÁø ÆÄÀÏÀ» ¿­ ¼ö ÀÖµµ·Ï Çã¿ëÇØ ´Þ¶ó°í ¿äûÀ» ÇØ¾ß ÇÒ °ÍÀÌ´Ù. Ä¿³Î¿¡ ¿äûÀ» ÇÒ ¼ö ÀÖµµ·Ï Áö¿øµÇ´Â ÇÔ¼ö¸¦ ½Ã½ºÅÛÄÝ(ȤÀº ½Ã½ºÅÛÇÔ¼ö)¶ó°í ¾ð±ÞÇß´ø °ÍÀ» ±â¾ïÇϰí ÀÖÀ» °ÍÀÌ´Ù. ¸®´ª½º´Â ÆÄÀÏ ¿Àǰú °ü·ÃµÈ ¿äûÀ» À§Çؼ­ open(2) À̶ó´Â ½Ã½ºÅÛÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.

open(2)ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
 
int open(const char *pathname, int flags); 
int open(const char *pathname, int flags, mode_t mode) 
 
pathname : ¿­±â¸¦ ¿äûÇÏ´Â ÆÄÀÏÀÌ´Ù. »ó´ë°æ·Î ȤÀº Àý´ë°æ·Î¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

flags : ¾î¶² ¹æ½ÄÀ¸·Î ¿­°ÍÀÎÁö¸¦ °áÁ¤Çϱâ À§Çؼ­ »ç¿ëÇϸç bitwise¿¬»êÀ» ÀÌ¿ëÇØ¼­, ´Ù¾çÇÑ ¹æ½ÄÀ» Á¶ÇÕÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ´ëÇ¥ÀûÀ¸·Î »ç¿ëµÇ´Â flag µéÀÌ´Ù.
  • O_RDONLY
    Àбâ Àü¿ëÀ¸·Î ÆÄÀÏÀ» ¿¬´Ù. ¾µ¼ö ¾ø´Ù.
  • O_WRONLY
    ¾²±â Àü¿ëÀ¸·Î ÆÄÀÏÀ» ¿¬´Ù.
  • O_RDWR
    Àбâ¿Í ¾²±â ¸ðµÎ°¡ °¡´ÉÇϵµ·Ï ÆÄÀÏÀ» ¿¬´Ù.
  • O_CREAT
    ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾ÊÀ» °æ¿ì ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.
  • O_EXCL
    O_CREAT¸¦ ½á¼­ ÆÄÀÏÀ» ¿ÀÇÂÇÒ °æ¿ì, ÀÌ¹Ì ÆÄÀÏÀÌ Á¸ÀçÇÑ´Ù¸é error¸¦ ¸®ÅÏÇÏ°Ô ÇÑ´Ù. ÆÄÀÏÀ» µ¤¾î¾²°Å³ª ÇÏ´Â ½Ç¼ö¸¦ ¹æÁöÇϱâ À§ÇÑ ¿ëµµ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

3¹øÂ° ÀÎÀÚÀÎ mode´Â ÆÄÀÏÀÇ ±ÇÇÑÀ» °áÁ¤Çϱâ À§Çؼ­ »ç¿ëÇϸç, »ý·«ÀÌ °¡´ÉÇÏ´Ù. ÆÄÀÏÀÌ »ý¼ºµÇ¸é ÆÄÀÏ¿¡ ´ëÇÑ ¼ÒÀ¯ÀÚ¿Í ±×·ìÀº ÀÚ½ÅÀÌ µÈ´Ù. ÀÌ ÀÎÀÚ¸¦ »ç¿ëÇϸé owner(»ç¿ëÀÚ), group(±×·ì), other(ŸÀÎ) °¢°¢¿¡ ´ëÇØ¼­ Àбâ, ¾²±â, ½ÇÇà ±ÇÇÑÀ» ºÎ¿©ÇÒ ¼ö ÀÖ´Ù. ¿ª½Ã bitwise ¿¬»êÀ» ÀÌ¿ëÇØ¼­ ´Ù¾çÇÑ Á¶ÇÕÀÌ °¡´ÉÇÏ´Ù.
  • S_IRWXU
    00700 ¸ðµå·Î ÆÄÀÏ ¼ÒÀ¯ÀÚ¿¡°Ô Àбâ, ¾²±â, ¾²±â ½ÇÇà±ÇÇÑÀ» ÁØ´Ù.
  • S_IRUSR
    00400 À¸·Î »ç¿ëÀÚ¿¡°Ô Àб⠱ÇÇÑÀ» ÁØ´Ù.
  • S_IWUSR
    00200 À¸·Î »ç¿ëÀÚ¿¡°Ô ¾²±â ±ÇÇÑÀ» ÁØ´Ù.
  • S_IXUSR
    00100 À¸·Î »ç¿ëÀÚ¿¡°Ô ½ÇÇà ±ÇÇÑÀ» ÁØ´Ù.
  • S_IRWXG
    00070 À¸·Î ±×·ì¿¡°Ô Àбâ, ¾²±â, ½ÇÇà ±ÇÇÑÀ» ÁØ´Ù.
  • S_IRGRP
    00040 À¸·Î ±×·ì¿¡°Ô Àбâ±ÇÇÑÀ» ÁØ´Ù.
  • S_IWGRP
    00020 À¸·Î ±×·ì¿¡°Ô ¾²±â±ÇÇÑÀ» ÁØ´Ù.
  • S_IXGRP
    00010 À¸·Î ±×·ì¿¡°Ô ½ÇÇà±ÇÇÑÀ» ÁØ´Ù.
  • S_IRWXO
    00007 À¸·Î ±âŸ »ç¿ëÀÚ ¿¡°Ô Àбâ, ¾²±â, ½ÇÇà ±ÇÇÑÀ» ÁØ´Ù.
  • S_IROTH
    00004 À¸·Î ±âŸ »ç¿ëÀÚ ¿¡°Ô Àб⠱ÇÇÑÀ» ÁØ´Ù.
  • S_IWOTH
    00002 À¸·Î ±âŸ »ç¿ëÀÚ ¿¡°Ô ¾²±â ±ÇÇÑÀ» ÁØ´Ù.
  • S_IXOTH
    00001 À¸·Î ±âŸ »ç¿ëÀÚ ¿¡°Ô ½ÇÇà ±ÇÇÑÀ» ÁØ´Ù.

¿¹¸¦ µéÀÚ¸é ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î ÆÄÀÏÀ» ¿­ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
// ÆÄÀÏÀ̸§ hello.txt ¿¡ µ¥ÀÌÅ͸¦ (´ÜÁö)¾²±â À§Çؼ­ ¿¬´Ù. 
// ÆÄÀÏÀÌ ¾øÀ» °æ¿ì »ý¼ºÇϸç 
// ±ÇÇÑÀº 640 À¸·Î ÇÑ´Ù. 
open("hello.txt", O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP); 
 

½ÇÁ¦·Î À§ÀÇ ±ÇÇÑÀ¸·Î ÆÄÀÏÀ» ¿ÀÇÂÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. ¾Æ·¡ÀÇ ÇÁ·Î±×·¥Àº ´ÜÁö ÆÄÀÏÀ» ¿­±â¸¸ ÇÒ »ÓÀÌÁö¸¸ ¼º°øÀûÀ¸·Î ÆÄÀÏÀ» »ý¼ºÇÒ °ÍÀÌ´Ù. ÇÁ·Î±×·¥ÀÇ À̸§Àº hello.c ·Î ÇϰڴÙ. ÇÁ·Î±×·¥ÀÇ ÀÛ¼º°ú ½ÇÇàÀº yundram°èÁ¤À» ÀÌ¿ëÇß´Ù.
#include <stdlib.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
 
int main() 
{ 
  int fd; 
  fd = open("hello.txt", O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP); 
} 
 
ls(1)¸¦ ÀÌ¿ëÇØ¼­ hello.txt¸¦ È®ÀÎÇØ º¸µµ·ÏÇÏÀÚ.
yundream@yundream:~$ ls -al hello.txt 
-rw-r----- 1 yundream yundream 0 2007-11-20 20:23 hello.txt 
 
¼ÒÀ¯ÀÚ°ú ±×·ìÀÌ yundreamÀ̰í 640ÀÇ ±ÇÇÑÀ» °¡Áö´Â ÆÄÀÏÀÌ »ý¼ºµÇ¾úÀ½À» ¾Ë ¼ö ÀÖ´Ù. ÆÄÀÏÀ» ¿­±â¸¸ ÇßÀ» »Ó, ¾Æ¹«·± ÀÛ¾÷À» ÇÏÁö ¾Ê¾Ò±â ¶§¹®ÀÇ ÆÄÀÏÀÇ Å©±â´Â 0ÀÌ´Ù.

4.2 file descriptor

open(2) ÇÔ¼ö¸¦ ´Ù½Ã º¸µµ·Ï ÇÏÀÚ. open(2)ÇÔ¼ö´Â ¸®Åϰá°ú·Î ´Ù·ç°ÔµÉ ÆÄÀÏÀÇ À̸§ÀÌ ¾Æ´Ñ intÇü Á¤¼ö¸¦ ³Ñ°ÜÁÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ intÇü Á¤¼ö°¡ ¹Ù·Î ÆÄÀÏÀ» °¡¸®Å°´Â ¿ªÇÒÀ» ÇÑ´Ù. ÆÄÀÏÀ» ÁöÁ¤Çϱ⠶§¹®¿¡, file descriptor ȤÀº 'ÆÄÀÏ ÁöÁ¤¹øÈ£¶ó°í ÇÑ´Ù. À̰ÍÀº ¿ì¸®°¡ ÀϹÝÀûÀ¸·Î ¾Ë°í ÀÖ´Â ¼ýÀÚ°¡ ¾Æ´Ñ ¿­·ÁÁø ÆÄÀϰ´Ã¼¸¦ °¡¸®Å°´Â °ÍÀÓ¿¡ À¯ÀÇ Çϱ⠹ٶõ´Ù.

open(2)À» ÀÌ¿ëÇØ¼­ ÆÄÀÏÀ» ¼º°øÀûÀ¸·Î ¿­¾ú´Ù¸é, ÀÌÈÄÀÇ ¸ðµç ¾²±â/Àб⠵îÀÇ ÀÛ¾÷Àº ÆÄÀÏÀ̸§ ´ë½Å ÆÄÀÏÁöÁ¤¹øÈ£¸¦ ÀÌ¿ëÇÏ°Ô µÈ´Ù.
  +------+ 
  | FILE |<---- file discriptor = open(2) 
  |      | 
  +------+ 
  openÀ¸·Î ¸®ÅÏµÈ intÇü Á¤¼ö´Â file discriptor ·Î½á, ¿­¸° ÆÄÀÏÀ» °¡¸®Å²´Ù. 
 

ÆÄÀÏÁöÁ¤¹øÈ£´Â 0ÀÌ»óÀÌ¿©¾ß ÇÑ´Ù. 0º¸´Ù ÀÛÀº °æ¿ì´Â ¾î¶²ÀÌÀ¯·Î ÆÄÀÏÀ» ¿©´Â°ÍÀÌ ½ÇÆÐÇßÀ½À» ÀǹÌÇÑ´Ù. À§ÀÇ ÇÁ·Î±×·¥Àº ¾Æ·¡Ã³·³ ÆÄÀÏ ¿À·ù±îÁö °Ë»çÇÏ´Â Á»´õ ±×·²µíÇÑ ÇÁ·Î±×·¥À¸·Î ¹Ù²Ü ¼ö ÀÖÀ» °ÍÀÌ´Ù.
  fd = open("hello.txt", O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP); 
  if (fd < 0) 
  { 
    perror("file open error:"); 
    return 1; 
  } 
 


5 ÆÄÀÏ¿¡¼­ Àбâ

ÆÄÀÏÀ» ¼º°øÀûÀ¸·Î ¿­¾ú´Ù¸é, ÀÌÁ¦ Àаųª ¾²´Â µîÀÇ ÀÛ¾÷À» ÇÏ¸é µÈ´Ù. ¿©±â¿¡¼­´Â ÆÄÀÏÀ» Àд ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇÒ °ÍÀÌ´Ù. ¿ì¼± ´ÙÀ½ÀÇ ³»¿ëÀ» °¡Áö´Â ¼ÀÇà ÆÄÀÏÀ» Çϳª ÁغñÇϵµ·Ï ÇÏÀÚ. ¿ì¸®´Â ¾Æ·¡ÀÇ ÆÄÀÏÀÇ ³»¿ëÀ» Àо È­¸é¿¡ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀ¸·Î ÆÄÀÏÀд ¹ý¿¡ ´ëÇØ¼­ ¹è¿ï °ÍÀÌ´Ù. ÆÄÀÏÀÇ À̸§Àº fly.txt·Î ÇϰڴÙ.
Fly me to the moon And let me play among the stars 
Let me see what spring is like on Jupiter and Mars 
In other words hold my hand 
In other words darling kiss me 
 
À¯¸íÇÑ fly me to the moon°¡»çÁß ÀϺκÐÀÌ´Ù. ¾î¶² ³ë·¡ÀÎÁö ±Ã±ÝÇÏ´Ù¸é ¸Ó¸®µµ ½ÄÈú°â ¿©±â¸¦ ¹æ¹®ÇØ º¸±â ¹Ù¶õ´Ù.

ÆÄÀÏ¿¡¼­ Àбâ À§Çؼ­´Â ´ç¿¬È÷ ÀбâÀü¿ë ȤÀº Àбâ/¾²±â »óÅ·ΠÆÄÀÏÀÌ ¿­·Á¾ß ÇÑ´Ù. ¿©±â¿¡¼­´Â Àбâ Àü¿ë ¸ðµå·Î ¿­µµ·Ï ÇÒ°ÍÀÌ´Ù. ¸¸µé¾îÁø ÆÄÀÏÀ» ¿©´Â °ÍÀ̱⠶§¹®¿¡ O_CREAT´Â Çʿ䰡 ¾øÀ» °ÍÀÌ´Ù. ÆÄÀÏÀ» »ý¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ¸ðµå ÀÎÀÚ¿ª½Ã ÇÊ¿ä¾ø´Ù. open ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
  fd = open("fly.txt", O_RDONLY); 
  if (fd < 0) 
  { 
    ... 
  } 
 

¼º°øÀûÀ¸·Î ÆÄÀÏÀ» ¿­¾ú´Ù¸é fd´Â 0º¸´Ù Å«¼ö°¡ ¸®ÅϵǾúÀ» °ÍÀ̰í, - ´ëºÎºÐÀÇ °æ¿ì 2º¸´Ù Å«¼ö°¡ ¸®Å쵃 °ÍÀÌ´Ù. ÀÌ ÀÌÀ¯´Â ¾Æ·¡¿¡¼­ ¼³¸íÇÒ °ÍÀÌ´Ù - ¸®ÅϹÞÀº Á¤¼ö¸¦ ÆÄÀÏÁöÁ¤¹øÈ£·Î »ç¿ëÇÏ°Ô µÈ´Ù. ¿ì¸®´Â ÀÌ ÆÄÀÏÁöÁ¤¹øÈ£¸¦ ÀÌ¿ëÇØ¼­ ÆÄÀÏÀÇ ³»¿ëÀ» ÀоîµéÀÌ°Ô µÈ´Ù.

5.1 read ½Ã½ºÅÛÄÝ

¿­¸° ÆÄÀÏ·Î ºÎÅÍ µ¥ÀÌÅ͸¦ Àбâ À§Çؼ­ Á¦°øÇÏ´Â ½Ã½ºÅÛÇÔ¼ö°¡ read(2)ÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ÀÎÀÚ·Î ÁÖ¾îÁø ÆÄÀÏÁöÁ¤¹øÈ£°¡ °¡¸®Å°´Â ÆÄÀÏ·Î ºÎÅÍ, ÁöÁ¤µÈ Å©±â¸¸Å­ÀÇ µ¥ÀÌÅ͸¦ ÀоîµéÀÌ°Ô µÈ´Ù. ´ÙÀ½Àº read(2) ÇÔ¼öÀÇ ¿øÇüÀÌ´Ù.
#include <unistd.h> 
 
size_t read(int fd, void *buf, size_t count); 
 
  1. fd : open(2)À¸·Î ¿­¸° ÆÄÀÏÀ» °¡¸®Å°´Â ÆÄÀÏÁöÁ¤¹øÈ£
  2. buf : ÀоîµéÀÎ µ¥ÀÌÅ͸¦ ÀúÀåÇÒ °ø°£
  3. count : ÀоîµéÀÏ µ¥ÀÌÅÍÀÇ Å©±â·Î byte ´ÜÀ§

ÇÔ¼ö´Â ´Ü¼øÇϸç Á÷°üÀûÀÌ´Ù. read ÇÔ¼ö´Â ¼º°øÀûÀ¸·Î ½ÇÇàµÉ °æ¿ì 0º¸´Ù Å«¼ö¸¦ ¸®ÅÏÇÑ´Ù. ÆÄÀÏÀÇ ³¡¿¡ ´Ù´Ù¶ó¼­ ´õÀÌ»ó ÀоîµéÀÏ µ¥ÀÌÅͰ¡ ¾ø´Ù¸é 0À» ¸®ÅÏÇÑ´Ù. read ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ´Â ÀϹÝÀûÀÎ ¹æ¹ýÀº ·çÇÁ¸¦ µ¹¸é¼­ ¸®ÅϰªÀÌ 0ÀÌ µÉ¶§±îÁö - Áï ÆÄÀÏÀÇ ³¡À» ¸¸³¯ ¶§±îÁö - µ¥ÀÌÅ͸¦ ÀоîµéÀÌ´Â °ÍÀÌ´Ù. ´ÙÀ½°ú °°Àº ÇüÅ·Π»ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
int readn = 0; 
int fd; 
char buf[80]; 
fd = open(...); 
 
memset(buf, 0x00, 80); 
while( (readn = read(fd, buf, 79) ) 
{ 
  // ÀоîµéÀÎ µ¥ÀÌÅͰ¡ ÀÖ´Â buf¸¦ ÀÌ¿ëÇØ¼­ ÇÊ¿äÇÑ ÀÛ¾÷À» ÇÑ´Ù. 
  memset(buf, 0x00, 80); 
} 
 

ÁÖÀÇÇØ¾ßÇÒ Á¡Àº µ¥ÀÌÅͰ¡ ÀúÀåµÇ´Â buf¸¦ memset(3) ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÃʱâÈ­ ½ÃÄÑÁà¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. read ÇÔ¼ö´Â count¸¸Å­ µ¥ÀÌÅ͸¦ Àоîµé¿©¼­ buf¿¡ º¹»çÇϱ⸸ ÇÒ»Ó, ³»¿ëÀ» ÃʱâÈ­ ½ÃŰ±â ¾Ê±â ¶§¹®ÀÌ´Ù. ¿¹¸¦µé¾î ÀÌÀü¿¡ 79byte¸¦ Àоîµé¿´°í, À̹ø¿¡ ÀоîµéÀÎ µ¥ÀÌÅͰ¡ 20byte¿´´Ù¸é, 21byte ÀÌÈÄÀÇ ÀÌÀü µ¥ÀÌÅͰ¡ ±×´ë·Î ³²¾Æ À־ À߸ø ó¸®ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¹°·Ð readÀÇ ¸®ÅϰªÀ» ÀÌ¿ëÇØ¼­ 20byte¸¦ Àоî¿Ô´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ¸¹Ç·Î ÁÖÀÇÇØ¼­ ó¸®ÇÏ¸é µÇ±ä ÇϰÚÁö¸¸ ½Ç¼öÇÒ ¸¸ÇÑ ¿©Áö´Â ¹Ì¸® Á¦°ÅÇÏ´Â°Ô ÁÁÀ» °ÍÀÌ´Ù.

¾Æ·¡ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ º¸±â ¹Ù¶õ´Ù. ÇÁ·Î±×·¥ÀÇ À̸§Àº fly.c·Î ÇÏÀÚ.
001 #include <stdlib.h> 002 #include <sys/types.h> 003 #include <sys/stat.h> 004 #include <fcntl.h> 005 006 #define MAXLEN 80 007 int main() 008 { 009 int fd; 010 int readn = 0; 011 char buf[MAXLEN]; 012 fd = open("fly.txt", O_RDONLY); 013 if (fd < 0) 014 { 015 perror("file open error:"); 016 return 1; 017 } 018 memset(buf, 0x00, MAXLEN); 019 while( (readn = read(fd, buf, MAXLEN-1 )) > 0) 020 { 021 printf("%s", buf); 022 } 023 } 024
ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ º¸¸é, ¸¶Áö¸·¿¡ ´ÙÀ½°ú °°ÀÌ ÀÌÀü¿¡ ÀоîµéÀÎ °ªÀÌ Ãâ·ÂµÇ´Â °ÍÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
Fly me to the moon And let me play among the stars 
Let me see what spring is like on Jupiter and Mars 
In other words hold my hand 
In other words darling kiss me 
on Jupiter and Mars 
In other words hold my hand 
... 
 

ÀÌÁ¦ 21ÁÙ ´ÙÀ½¿¡ memset(buf, 0x00, MAXLEN); À» Ãß°¡ÇÏ°í³ª¼­ ´Ù½Ã ½ÇÇà½ÃÄÑ º¸µµ·Ï ÇÏÀÚ. ¹®Á¦¾øÀÌ ±ò²ûÇÏ°Ô Ãâ·ÂµÇ´Â°É È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¶ÇÇϳª Äڵ忡¼­ ±Ã±ÝÇÑÁ¡ÀÌ ÀÖÀ» °ÍÀÌ´Ù. read ¿¡¼­ ¹öÆÛÀÇ ÃÖ´ëÅ©±âÀÎ MAXLEN ¸¸Å­À» ÀоîµéÀÌÁö ¾Ê°í MAXLEN-1 ¸¸Å­À» ÀоîµéÀÌ´Â Á¡ÀÌ´Ù. ÀÌ´Â ¿ª½Ã ¹öÆÛÀÇ Å©±â¸¦ ³Ñ¾î¼­¼­ µ¥ÀÌÅ͸¦ Àоî¹ö¸®´Â ¸¸¾àÀÇ ½Ç¼ö¸¦ ¸·±â À§ÇÔÀÌ´Ù. printf(3)ÇÔ¼öÀÇ °æ¿ì ³Î¹®ÀÚ('\0')¸¦ ¸¸³ª±â Àü±îÁö µ¥ÀÌÅ͸¦ ÀоîµéÀÌ°Ô µÈ´Ù. ¹öÆÛ¸¦ °¡µæÃ¤¿ö¼­ Àоîµé¿´´Âµ¥, ¹öÆÛ¸Þ¸ð¸® ¿µ¿ªÀÇ ¸¶Áö¸·ÀÌ '\0'ÀÌ ¾Æ´Ò °æ¿ì ³¡ÀÌ ¾Æ´Ï¶ó°í ÆÇ´ÜÇØ¼­, '\0'À» ¸¸³¯¶§±îÁö ¸Þ¸ð¸®¿µ¿ªÀ» ¹þ¾î³ª¼­ °è¼Ó ÀÐ¾î ¹ö¸®´Â ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×·¯ÇÏ´Ï ¹öÆÛÀÇ ¸¶Áö¸·¶óÀÎÀ» '\0'À¸·Î ¸¸µé¾î ¹ö¸®´Â°Ô ±ò²ûÇÏ´Ù.
  01 ...  89 80 
 +-------+--+--+--------------------------+ 
 | ..... |  |  | '\0'ÀÌ ¾Æ´Ñ ¾Ë¼ö ¾ø´Â °ª | 
 +-------+--+--+--------------------------+ 
 |<--- buf --->| 
 

ÀÌ °æ¿ì¿¡µµ ÀоîµéÀÎ µ¥ÀÌÅÍÀÇ Å©±â¸¦ ¾Ë ¼ö Àֱ⠶§¹®¿¡ snprintf()¿Í °°Àº ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¸Áö¸¸ °¡´ÉÇÑ ¹®Á¦ ¹ß»ý ¿©Áö¸¦ ¾ø¾Ö´Â ÂÊÀ¸·Î ÄÚµùÀ» ÇÏ´Â°Ô ÁÁÀ» °ÍÀÌ´Ù.

±×·¸´Ù°í ÇØ¼­, ¸ðµç °æ¿ì¿¡ À־ ¹®Á¦°¡ µÇ´Â°Ç ¾Æ´Ï´Ù. ÆÄÀϷκÎÅÍ ÀоîµéÀÏ µ¥ÀÌÅͰ¡ char, int ¿Í °°Àº ¿ø½Ãµ¥ÀÌÅÍ Å¸ÀÔÀÏ °æ¿ì¿¡´Â Å©±â°¡ ¸íÈ®È÷ ¸í½ÃµÇ¹Ç·Î À§¿¡¼­¿Í °°Àº ÃʱâÈ­ °ü·ÃµÈ ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê´Â´Ù.

5.2 ¹öÆÛ°ø°£ÀÇ Å©±â

buffer°¡ »ç¿ëµÇ´Â ÀϹÝÀûÀÎ ÀÌÀ¯´Â ÀâÀ½À» ¾ø¾Ö°í ¼º´ÉÀ» ³ôÀ̱â À§ÇÔÀÌ´Ù. ÀоîµéÀÏ µ¥ÀÌÅͰ¡ 1024 ¸¸Å­ÀÌ ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ. ¹öÆÛÀÇ Å©±â¸¦ 1·Î Àâ¾Ò´Ù¸é, read(2) ÇÔ¼ö¸¦ 1024¹ø È£ÃâÇØ¾ß µÉ°ÍÀÌ´Ù. ¸¸¾à ¹öÆÛÀÇ Å©±â¸¦ 512·Î Àâ´Â´Ù¸é, ´Ü 2¹ø¸¸ read(2)ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÉ °ÍÀÌ´Ù. ÈÄÀÚ°¡ ´õ È¿À²ÀûÀÏ °Å¶ó´Â °ÍÀº ºÐ¸íÇÏ´Ù.

±×·¸´Ù°í ÇØ¼­ ¹«ÀÛÁ¤ ¸Þ¸ð¸®¸¦ Å©°ÔÀâ´Â °Íµµ ³¶ºñ´Ù. ½Ã°£°ú ºñ¿ëÀÌ °ü·ÃµÈ ´ëºÎºÐÀÇ Çö»óÀÌ ±×·¸µíÀÌ ¾î´ÀÁ¤µµ Å©±â°¡ Áö³ª¸é ¼º´ÉÀÇ Áõ°¡ÆøÀÌ ÁÙ¾îµå´Â ÁöÁ¡ÀÌ ¿À±â ¶§¹®ÀÌ´Ù. Àû´çÇÑ ¼±¿¡¼­ Æ®·¹À̵å¿ÀÇÁ ÇØ¾ßÇÒ Çʿ䰡 ÀÖ´Ù.

¾î¶² µ¥ÀÌÅ͸¦ ó¸®ÇÏ´À³Ä¿¡ µû¶ó´Ù¸£°ÚÁö¸¸ 512byte³ª 1024byteÁ¤µµÀÇ Å©±â·Î ÇÏ´Â°Ô ¹«³­ÇÏ´Ù°í ¾Ë·ÁÁ® ÀÖ´Ù.

6 ÆÄÀÏ¿¡ ¾²±â

ÆÄÀÏ¿¡ µ¥ÀÌÅ͸¦ ¾²±â À§Çؼ­´Â ¾²±âÀü¿ë ȤÀº Àбâ/¾²±â °¡´É¸ðµå·Î ¿­¾î¾ß ÇÑ´Ù. ¸®´ª½º Ä¿³ÎÀº ¾²±â¿äûÀ» À§ÇÑ write(2) ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
#include <unistd.h> 
 
ssize_t write(int fd, const void *buf, size_t count); 
 
ÀÌ ÇÔ¼ö´Â buf¿¡ ÀÖ´Â ³»¿ëÀ» count Å©±â¸¸Å­ ÆÄÀÏÁöÁ¤¹øÈ£ fd°¡ °¡¸®Å°´Â ÆÄÀÏ¿¡ ¾µ °ÍÀ» Ä¿³Î¿¡ ¿äûÇÑ´Ù. ¼º°øÇÏ°Ô µÇ¸éÀº ¾´ byte Å©±â¸¸Å­À» ¸®ÅÏÇÑ´Ù.

´ÙÀ½Àº data.txt ÆÄÀÏÀ» ¿­¾î¼­ intÇü µ¥ÀÌÅ͸¦ ¾²´Â ÇÁ·Î±×·¥ÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥ÀÇ À̸§Àº write.c·Î ÇϰڴÙ.
001  #include <fcntl.h>
002  #include <unistd.h>
003  #include <stdio.h>
004  #include <string.h>
005  
006  int main()
007  {
008      int fd;
009      int i;
010      int wdata = 0;
011      int wsize = 0;
012      fd = open("data.txt", O_CREAT|O_WRONLY);
013      if (fd < 0)
014      {
015          perror("file open error");
016          return 1;
017      }
018  
019      for (i = 0; i < 100; i++)
020      {
021          wdata = i * 2;
022          wsize = write(fd, (void *)&wdata, sizeof(int));
023          printf("Write %d (%d byte)\n", i*2);
024      }
025      close(fd);
026  }
027  

22ÁÙÀ» ÁÖÀDZí°Ô »ìÆìº¸µµ·Ï ÇÏÀÚ. fd¿¡ intÇü º¯¼öÀÎ wdata¿¡ ÀúÀåµÈ °ªÀ» ¾²·Á°íÇϰí ÀÖ´Ù. wdata´Â intÇü µ¥ÀÌÅÍÀ̱⠶§¹®¿¡, void *ÇüÀ¸·Î Çüº¯È¯À» Çß´Ù. ¸¶Áö¸·À¸·Î sizeof ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ¾²°íÀÚ ÇÏ´Â µ¥ÀÌÅÍÀÇ Å©±â¸¦ ±¸Çؼ­, writeÀÇ 3¹øÂ° ÀÎÀÚ·Î µÇµ¹·Á Áá´Ù. int µ¥ÀÌÅÍ Å¸ÀÔÀÇ Å©±â´Â 4byte¶ó´Â °ÍÀ» ÀÌ¹Ì ¾Ë°í Àֱ⠶§¹®¿¡, sizeof¸¦ ¾²Áö ¾Ê°í 4¸¦ Á÷Á¢ ¸í½ÃÇØµµ µÉ °ÍÀÌ´Ù.

±×·¯³ª ¾î¶² ¿î¿µÃ¼Á¦¿Í ÄÄÆÄÀÏ·¯ÀÇ È¯°æ¿¡ µû¶ó¼­ int°¡ 2byte ȤÀº 8byte°¡ µÇ´Â °æ¿ìµµ ÀÖ´Ù. ±×·¯¹Ç·Î À̽ļºÀ» °í·ÁÇÑ´Ù¸é sizeof ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ µ¥ÀÌÅÍŸÀÔÀÇ Å©±â¸¦ ¾ò¾î³»´Â ¹æ¹ýÀ» »ç¿ëÇÏ´Â°É ±ÇÀåÇÑ´Ù.

ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ ÇÏ°í ½ÇÇà½ÃŰ¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
# gcc -o write write.c 
# ./write 
Write 0 (4 byte) 
Write 2 (4 byte) 
Write 4 (4 byte) 
Write 6 (4 byte) 
Write 8 (4 byte) 
 
ls·Î data.txt ÆÄÀÏÀÌ »ý¼ºµÈ°É º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ÆÄÀÏÀÇ ³»¿ëÀ» »ìÆìº¸±â À§Çؼ­ vi·Î ¿­¾îµµ ³»¿ëÀ» ¾Ë¾Æº¼ ¼ö´Â ¾øÀ» °ÍÀÌ´Ù. ÀÌ ÆÄÀÏÀÇ ³»¿ëÀº ASCII printable µ¥ÀÌÅÍ - ÈçÈ÷ ¸»ÇÏ´Â ¹®ÀÚµ¥ÀÌÅÍ - °¡ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù.

7 ÆÄÀÏ ´Ý±â

¿­¸° ÆÄÀÏÀ» ´õÀÌ»ó ¾²Áö ¾Ê´Â´Ù¸é, ´Ý¾ÆÁÖ¾î¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ»°æ¿ì ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ¶§±îÁö, °è¼Ó ³²¾Æ¼­ ÄÄÇ»ÅÍ ½Ã½ºÅÛÀÇ ÀÚ¿øÀ» ¼ÒºñÇÏ°Ô µÈ´Ù. ÆÄÀÏÀÇ Á¾·á´Â close(2) ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù.
#include <unistd.h> 
 
int close(int fd); 
 

8 ¿ø½Ã µ¥ÀÌÅÍŸÀÔÀÇ µ¥ÀÌÅÍ¿Í ±¸Á¶Ã¼µ¥ÀÌÅÍ ÀÐ°í ¾²±â

±×·³ ¹Ù·Î À§¿¡¼­ ´Ù·é data.txt¿¡ ÀúÀåµÈ intÇü Á¤º¸¸¦ Àо È­¸é¿¡ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ º¸µµ·Ï ÇÏÀÚ. ÇÁ·Î±×·¥ÀÇ È帧Àº °£´ÜÇÏ´Ù. data.txt ¸¦ ÀбâÀü¿ë À¸·Î ¿¬´ÙÀ½ read(2) ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ 4byte¾¿ ÀоîµéÀδÙ. ÀоîµéÀÎ µ¥ÀÌÅÍ´Â printf(3) ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ È­¸é¿¡ Ãâ·ÂÇÏ¸é µÈ´Ù.
001  #include <stdlib.h>
002  #include <stdio.h>
003  #include <sys/types.h>
004  #include <sys/stat.h>
005  #include <fcntl.h>
006  
007  #define MAXLEN 80
008  int main()
009  {
010    int fd;
011    int readn = 0;
012    int buf;
013    fd = open("data.txt", O_RDONLY);
014    if (fd < 0)
015    {
016      perror("file open error:");
017      return 1;
018    }
019    while( (readn = read(fd, (void *)&buf, sizeof(buf) )) > 0)
020    {
021      printf("Read Data : %d\n", buf);
022    }
023  }
024  
fly.c¿Í ´Þ¶óÁø Á¡Àº 19ÁÙ Á¤µµ´Ù. ÀÐÀ» Á¤º¸°¡ intÇü µ¥ÀÌÅÍ À̹ǷÎ, intÇü µ¥ÀÌÅÍŸÀÔÀÇ Å©±â¸¸Å­ - ´ëºÎºÐÀÇ °æ¿ì 4byteÀÏ °ÍÀÌ´Ù - Àо buf¿¡ º¹»çÇϰí ÀÖ´Ù. ÀоîµéÀÎ Á¤º¸´Â 21ÁÙ¿¡¼­ print¸¦ ÅëÇØ¼­ Ãâ·ÂÀ» Çß´Ù.

ÀÌ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ º¸¿©ÁÙ °ÍÀÌ´Ù.
# ./read 
Read Data : 0 
Read Data : 2 
Read Data : 4 
Read Data : 6 
Read Data : 8 
... 
 

¹®ÀÚ¿­ µ¥ÀÌÅÍÀ̵çÁö ¾Æ´Ï¸é int Çü ¼ýÀÚ µ¥ÀÌÅÍÀ̵çÁö°£¿¡ ÄÄÇ»ÅÍÀÇ ÀÔÀå¿¡¼­´Â ºñÆ®ÀÇ ³ª¿­ÀÏ »ÓÀÓÀ» ¸í½ÉÇÒ Çʿ䰡 ÀÖ´Ù. ´ÜÁö Ç¥ÇöÀÇ Â÷ÀÌÀ» »ÓÀÌ´Ù. ¶È°°Àº ºñÆ®ÀÇ ³ª¿­ÀÌ¶óµµ ¹®ÀÚ¿­·Î Ç¥ÇöÇϰíÀÚ ÇÏ¸é ¹®ÀÚ¿­ÀÌ µÇ´Â °Å°í, ¼ýÀڷΠǥÇöÇϰíÀÚ ÇÏ¸é ¼ýÀÚ·Î ÆìÇöµÈ´Ù.

8.1 Á»´õ º¹ÀâÇÑ ±¸Á¶Ã¼ µ¥ÀÌÅÍ ÀÐ°í ¾²±â

ÄÄÇ»ÅÍ °üÁ¡¿¡¼­ ¸ðµç µ¥ÀÌÅÍ´Â µ¿ÀÏÇÑ bitÀÇ ³ª¿­ÀÏ »ÓÀ̶ó´Â°É ÀÌÇØÇÑ´Ù¸é, ±¸Á¶Ã¼¸¦ ÀÐ°í ¾²´Â °Í ¿ª½Ã ÀüÇô ¹®Á¦µÉ°Ô ¾ø´Ù. ´ëºÎºÐÀÇ °í¼öÁØ ÀÀ¿ë ÇÁ·Î±×·¥À̶ó¸é ¹®ÀÚ¿­À̳ª int, long°ú °°Àº ¿ø½Ãµ¥ÀÌÅÍŸÀÔ º¸´Ù´Â ±¸Á¶Ã¼ µ¥ÀÌÅ͸¦ ÀÐ°í ¾²µµ·Ï µÇ¾î ÀÖ´Ù.

À¯ÀúÁ¤º¸¸¦ ÀúÀåÇϰí Àд °£´ÜÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ. ÇϳªÀÇ À¯Àú¸¦ ³ªÅ¸³»±â À§Çؼ­ ÇÊ¿äÇÑ Á¤º¸´Â ´ÙÀ½°ú °°´Ù°í °¡Á¤Çغ¸ÀÚ.
À̸§ 
³ªÀÌ 
¼ºº° 
Ãë¹Ì 
 
ÇÁ·Î±×·¡¸Ó´Â ´ë·« ´ÙÀ½°ú °°Àº ±¸Á¶Ã¼¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. ±¸Á¶Ã¼´Â µ¥ÀÌÅ͸¦ ·¹ÄÚµå ´ÜÀ§·Î °ü¸®ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁֱ⠶§¹®ÀÌ´Ù.
struct userInfo 
{ 
  char name[28]; 
  int  age; 
  int  sex; 
  char hobb6[28]; 
}; 
 

±×·³ À§ÀÇ ±¸Á¶Ã¼ Á¤º¸¸¦ ÀúÀåÇÏ´Â °£´ÜÇÑ À¯ÀúÁ¤º¸ °ú¸®ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. Á¦´ë·Î ¸¸µé·Á°í Çϸé, °¢ ±¸Á¶Ã¼º¯¼ö µ¥ÀÌÅ͸¦ ÀԷ¹ޱâ À§È¯ ÀÎÅÍÆäÀ̽º±îÁö ¸¸µé¾î¾ß °ÚÁö¸¸ »ý·«Çϵµ·Ï ÇÒ °ÍÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥Àº µÞºÎºÐ¿¡¼­ »ç¿ëÀÚ ÀÔ·ÂÀ» ¹ÞÀ» ¼ö ÀÖµµ·Ï È®ÀåµÉ °ÍÀÌ´Ù.

Å×½ºÆ®¸¦ À§Çؼ­ Àбâ¿Í ¾²±â¸¦ Àü´ãÇÏ´Â 2°³ÀÇ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ °ÍÀÌ´Ù. ¿ì¼± ¾²±â ÇÁ·Î±×·¥ÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥ÀÇ À̸§Àº UserInfoWrite.c ·Î ÇϰڴÙ.
001  nclude <stdlib.h>
002  #include <sys/types.h>
003  #include <sys/stat.h>
004  #include <fcntl.h>
005  #include <string.h>
006  #include <stdio.h>
007  
008  struct userInfo
009  {
010    char name[28];
011    int age;
012    int sex;
013    char hobby[28];
014  };
015  
016  void makeUserInfo(struct userInfo *uinfo,
017    char *name, // À̸§
018    int age,    // ³ªÀÌ
019    int sex,    // ¼º (³²: 0, ¿©: 1)
020    char *hobby) // Ãë¹Ì
021  {
022    memset((void *)uinfo, 0x00, sizeof(struct userInfo));
023    strcpy(uinfo->name, name);
024    uinfo->age = age;
025    uinfo->sex = sex;
026    strcpy(uinfo->hobby, hobby);
027  }
028  
029  int main()
030  {
031    int fd;
032    struct userInfo myAddrBook;
033    fd = open("hello.txt", O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP);
034    if (fd < 0)
035    {
036      perror("file open error");
037      return 1;
038    }
039  
040    makeUserInfo((void *)&myAddrBook, "yundream", 19, 0, "ÇÁ·Î±×·¡¹Ö");
041    write(fd, (void *)&myAddrBook, sizeof(myAddrBook));
042  
043    makeUserInfo((void *)&myAddrBook, "hello", 22, 1, "°ÔÀÓ");
044    write(fd, (void *)&myAddrBook, sizeof(myAddrBook));
045  
046    makeUserInfo((void *)&myAddrBook, "µå¶ó°í³Ê", 33, 1, "»ç³É");
047    write(fd, (void *)&myAddrBook, sizeof(myAddrBook));
048  
049    close(fd);
050    return 0;
051  }
052  

À¯ÀúÁ¤º¸¿Í À¯ÀúÁ¤º¸¿Í À¯ÀúÁ¤º¸ ±¸Á¶Ã¼ÀÎ userInfo¸¦ ³Ñ±â¸é, ±¸Á¶Ã¼¸¦ ü¿ì´Â makeuserInfo¶ó´Â ÇÔ¼ö¸¦ ¸¸µé¾ú´Ù. ÇöÀç´Â ÇÁ·Î±×·¥»ó¿¡ Á÷Á¢ À¯ÀúÁ¤º¸¸¦ Áý¾î ³Ö¾úÁö¸¸ ³ªÁß¿¡´Â Űº¸µå·Î ÀԷ¹ÞÀ» ¼ö ÀÖµµ·Ï ÇÒ °ÍÀÌ´Ù.

40 ~ 47¿¡¼­ À¯ÀúÁ¤º¸ ±¸Á¶Ã¼ myAddrBookÀ» ÆÄÀÏ¿¡ ¾²°í ÀÖ´Ù. intÇüµ¥ÀÌÅÍ char Çü µ¥ÀÌÅ͸¦ ¾²´Â °Í°ú ¹ß´Ù¸¦°Ô ¾øÀ½À» ¾Ë ¼ö ÀÖ´Ù. ÄÄÇ»ÅÍÀÇ ÀÔÀå¿¡¼­´Â intÇü µ¥ÀÌÅÍÀ̵çÁö char Çü µ¥ÀÌÅÍÀ̵çÁö °£¿¡ ºñÆ®ÀÇ ³ª¿­ÀÏ »ÓÀÓÀ¸·Î ±Ùº»ÀûÀ¸·Î ´Ù¸¦°Ô ¾ø±â ¶§¹®ÀÌ´Ù. ¸î¹ÙÀÌÆ®ÀÇ Á¤º¸¸¦ ÀúÀåÇÒ °ÍÀÎÁö¿¡ ´ëÇÑ ÀúÀåÅ©±â¿¡¸¸ Â÷À̰¡ ÀÖÀ» »ÓÀÌ´Ù.

´ÙÀ½Àº hello.txt¿¡ ÀúÀåµÈ À¯ÀúÁ¤º¸¸¦ Àоîµé¿©¼­ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ÇÁ·Î±×·¥ÀÇ À̸§Àº UserInfoRead.c ·Î ÇϰڴÙ.
001  #include <stdlib.h>
002  #include <sys/types.h>
003  #include <sys/stat.h>
004  #include <fcntl.h>
005  #include <string.h>
006  #include <stdio.h>
007  
008  struct userInfo
009  {
010    char name[28];
011    int age;
012    int sex;
013    char hobby[28];
014  };
015  
016  int main()
017  {
018    int fd;
019    struct userInfo myAddrBook;
020    int dataSize;
021    fd = open("hello.txt", O_RDONLY);
022    if (fd < 0)
023    {
024      perror("file open error");
025      return 1;
026    }
027  
028    dataSize = sizeof(myAddrBook);
029    printf("User Info =====================\n\n");
030    while(read(fd, (void *)&myAddrBook, dataSize) == dataSize)
031    {
032      printf("name  : %s\n", myAddrBook.name);
033      printf("age   : %d\n", myAddrBook.age);
034      printf("sex   : %d\n", myAddrBook.sex);
035      printf("hobby : %s\n", myAddrBook.hobby);
036      printf("===============================\n");
037    }
038    close(fd);
039    return 0;
040  }
041  
µ¥ÀÌÅ͸¦ Àб⸸ ÇÒ °ÍÀ̱⠶§¹®¿¡, O_RDONLY¸¦ »ç¿ëÇß´Ù. ´ÙÀ½ while¹®À» µ¹¸é¼­ userInfo ±¸Á¶Ã¼ÀÇ Å©±â¸¸Å­, ÆÄÀÏ·Î ºÎÅÍ µ¥ÀÌÅ͸¦ Àоîµé¿©¼­ myAddrBook¿¡ ÀúÀåÇϰí ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.

9 ÆÄÀÏÀÇ ±ÇÇѰú ¸ðµå

¸®´ª½º´Â ´ÙÁß»ç¿ëÀÚ ¿î¿µÃ¼Á¦À̸ç, ¶§¹®¿¡ ¸ðµçÆÄÀÏ¿¡´Â ±ÇÇÑÀÌ ºÎ¿©µÈ´Ù. ¸®´ª½º»ó¿¡¼­´Â ¸ðµç °ÍÀÌ ÆÄÀϷΠǥÇöµÇ±â ¶§¹®¿¡, ÆÄÀÏ¿¡ ±ÇÇÑÀ» ºÎ¿©ÇÑ´Ù´Â ¾ê±â´Â ¿î¿µÃ¼Á¦¿Í ÄÄÇ»ÅÍÀÇ ¸ðµç °Í¿¡ ´ëÇÑ ±ÇÇÑÀÌ ºÎ¿©µÉ ¼ö ÀÖ´Ù´Â °Í°ú ¸¶Âù°¡Áö°¡ µÈ´Ù.

¿¹ÄÁµ¥ ±ÇÇÑÀ̶óÇÔÀº ÀÌÆÄÀÏÀº ³»°ÍÀÌ¸ç ³ª¸¸ ÀÐÀ» ¼ö ÀÖ´Ù¶óµçÁö ½ºÅ͵ð ±×·ì¿¡ Æ÷ÇÔµÈ »ç¶÷µéÀº ÀÐÀ» ¼ö ÀÖÁö¸¸ ´Ù¸¥ »ç¶÷µéÀº ÀÐÀ» ¼ö ¾ø´Ùµî°ú °°Àº Á¢±Ù ±ÇÇÑÀ» ¸»ÇÑ´Ù. ¿©±â¿¡ Á¢±Ù±ÇÇÑ ¿Ü¿¡µµ Àбâ¿Í ¾²±â °¡´É¿¡ ´ëÇÑ ÇàÀ§±îÁö ¼¼ºÎÀûÀ¸·Î ºÐ·ùÇÒ ¼ö ÀÖ´Ù. Çö½Ç¿¡¼­¿Í ¸¶Âù°¡Áö´Ù. Çö½Ç¿¡¼­µµ Á÷À§³ª Á÷Ã¥, ºÎ¼­¿¡ µû¶ó¼­ ¹®¼­¿¡ ´ëÇÑ Á¢±Ù±ÇÇÑÀÌ Á¤ÇØÁ® ÀÖÀ¸¸ç, Àбâ¿Í ¾²±â¿¡ ´ëÇÑ ÇàÀ§µµ Á¤ÀǵȴÙ.

Á¤¸®ÇÏÀÚ¸é ÆÄÀÏ¿¡ ´ëÇÑ ¼ÒÀ¯ÀÚ°¡ ´©±¸Àΰ¡¿¡ ´ëÇÑ °ÍÀÌ ±ÇÇÑÀ̰í, ±ÇÇÑÀ» °¡Áø »ç¿ëÀÚ¿¡ ´ëÇÑ Àбâ/¾²±â¿¡ ´ëÇÑ °¡´ÉÇÑ Á¢±Ù¹üÀ§°¡ ¸ðµåÀÌ´Ù.

¸®´ª½º ¿î¿µÃ¼Á¦ÀÇ ÆÄÀÏÀº Àбâ¿Í ¾²±â¿Ü¿¡ ½ÇÇà¿¡ ´ëÇÑ ¸ðµåµµ °¡Áö°í ÀÖ´Ù´Â°Ô Çö½Ç¼¼°è¿¡¼­ÀÇ ¹®¼­½Ã½ºÅÛ°ú ´Ù¸¥Á¡À̶ó ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÆÄÀÏ¿¡ ´ëÇÑ ±ÇÇÑÀº ¼ÒÀ¯ÀÚ, ±×·ì, other ¼¼ºÎºÐÀ¸·Î ³ª´¶´Ù. ¼ÒÀ¯ÀÚ´Â °³ÀÎÀ̶ó°í »ý°¢ÇÒ ¼ö ÀÖ´Ù. ÆÄÀÏ¿¡ ´ëÇÑ ¸ðµå´Â À§¿¡¼­ ¾ð±ÞÇßµíÀÌ Àбâ,¾²±â,½ÇÇà 3°³·Î ¼¼ºÐÈ­ µÉ ¼ö ÀÖ´Ù. À̵éÀÇ Á¶ÇÕÀ¸·Î ÆÄÀÏÀÇ ±ÇÇѰú ¸ðµå°¡ Á¤ÀÇ µÈ´Ù.

¿ì¸®´Â ls¸¦ ÅëÇØ¼­ ÆÄÀÏÀÇ ±ÇÇѰú ¸ðµå¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù.

# ls -al 
-rw-r--r--  1 yundream yundream 4806656 2006-07-28 14:00 My_sweet_darlin.mp3 
drwxr-xr-x  5 yundream yundream    4096 2007-07-29 01:26 PicasaDocuments 
-rwxr-xr-x  1 yundream yundream    7402 2007-11-26 00:01 UserInfoRead 
-rw-r--r--  1 yundream yundream     751 2007-11-26 00:02 UserInfoRead.c 
-rwxr-xr-x  1 yundream yundream    7433 2007-11-25 23:33 UserInfoWrite 
-rw-r--r--  1 yundream yundream    1087 2007-11-25 23:56 UserInfoWrite.c 
drwxr-xr-x  2 yundream yundream    4096 2007-07-31 23:51 backup 
 

ÆÄÀÏÀÇ ±ÇÇѰú ¸ðµå¿¡ ´ëÇÑ ³»¿ëÀº ¸®´ª½º ȯ°æ¿¡¼­ÀÇ C ÇÁ·Î±×·¡¹Ö¿¡¼­ ÀÚ¼¼È÷ ¾ð±ÞÇϰí ÀÖÀ¸´Ï Âü°í¹Ù¶õ´Ù. ¿©±â¿¡¼­´Â ÀÌÁ¤µµ·Î¸¸ ¼³¸íÇÏ°í ´ÙÀ½À¸·Î ³Ñ¾î°¡µµ·Ï ÇϰڴÙ.

10 ÆÄÀÏÀÇ Á¾·ù¿Í ±ÇÇÑ,¸ðµå ¾Ë¾Æ³»±â

¸ðµç °ÍÀÌ ÆÄÀϷΠǥÇöµÉ ¼ö ÀÖ´Ù´Â Á¡°ú ´ÙÁß»ç¿ëÀÚ ¿î¿µÃ¼Á¦¶ó´Â ¸®´ª½º ¿î¿µÃ¼Á¦ÀÇ Æ¯¼º»ó ÆÄÀÏÀÇ Á¾·ù¿Í ±ÇÇÑ,¸ðµå¸¦ ¾Ë¾Æ³»´Â °ÍÀº ¸Å¿ì Áß¿äÇÏ´Ù. ÆÄÀÏÀ» ´Ù·ç´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ °æ¿ì °¡Àå ¸ÕÀúÇÏ´Â ÀÏÀÌ Á¢±Ù°¡´ÉÇÑ ÆÄÀÏÀÎÁö¸¦ È®ÀÎÇÏ´Â ÀÏÀÌ´Ù. ¸®´ª½º´Â ÆÄÀÏ¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò¾î¿Ã ¼ö ÀÖ´Â stat¶ó´Â ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
#include #include #include int stat(const char *file_name, struct stat *buf); ÆÄÀÏ À̸§ file_name¸¦ ÀÎÀÚ·Î ÁÖ¸é, ±×¿¡ ´ëÇÑ Á¤º¸¸¦ stat±¸Á¶Ã¼¿¡ ´ã¾Æ¼­ µÇµ¹·ÁÁØ´Ù. stat¿¡´Â ´ÙÀ½°ú °°Àº ÆÄÀÏ Á¤º¸µéÀÌ ´ã°ÜÁ® ÀÖ´Ù.
struct stat { 
    dev_t         st_dev;      /* device */ 
    ino_t         st_ino;      /* inode */ 
    mode_t        st_mode;     /* protection */ 
    nlink_t       st_nlink;    /* number of hard links */ 
    uid_t         st_uid;      /* user ID of owner */ 
    gid_t         st_gid;      /* group ID of owner */ 
    dev_t         st_rdev;     /* device type (if inode device) */ 
    off_t         st_size;     /* total size, in bytes */ 
    blksize_t     st_blksize;  /* blocksize for filesystem I/O */ 
    blkcnt_t      st_blocks;   /* number of blocks allocated */ 
    time_t        st_atime;    /* time of last access */ 
    time_t        st_mtime;    /* time of last modification */ 
    time_t        st_ctime;    /* time of last change */ 
}; 
 
ÁÖ¼®À» º¸´Â Á¤µµ·Î °¢ ¸â¹öº¯¼ö°¡ ÀǹÌÇÏ´Â ¹Ù¸¦ ½±°ÔÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯´Ï ¸î°³ »ý¼ÒÇÑ ¸â¹öº¯¼öµé¸¸À» ¼³¸íÇϵµ·Ï ÇϰڴÙ.
  • st_ino : ÆÄÀÏÀÇ ÀϷùøÈ£´Ù. ÀÌ ¹øÈ£´Â ÇϳªÀÇ ÀåÄ¡¿¡¼­ À¯ÀÏÇÏ°Ô Á¸ÀçÇϸç, ÆÄÀϰú ÆÄÀÏÀ» ±¸ºÐÇÏ°Ô ÇØÁØ´Ù. ÇϳªÀÇ ÀåÄ¡¿¡¼­¸¸ À¯ÀÏÇÏ´Ù´Â °Í¿¡ ÁÖÀÇÇϱ⠹ٶõ´Ù.
  • st_dev : ÆÄÀÏÀÌ ¼ÓÇÑ ÀåÄ¡ÀÇ ½Äº°¹øÈ£´Ù. st_ino ¿Í st_dev ÀÇ ½ÖÀº Àüü ½Ã½ºÅÛ¿¡¼­ À¯ÀÏÇÏ´Ù.
  • st_nlink : ÆÄÀÏÀÇ hard link(ÀÌÇÏ Çϵ帵ũ)ÀÇ °¹¼ö¸¦ ¾Ë·ÁÁØ´Ù. Çϵ帵ũ¿¡ ´ëÇÑ ³»¿ëÀº µû·Î ÀÚ¼¼È÷ ´Ù·çµµ·Ï ÇϰڴÙ.
  • st_mode : ÆÄÀÏÀÇ Çü½ÄÀ» ¾Ë·ÁÁØ´Ù. ÀÌ °ªÀ» ÀÌ¿ëÇØ¼­, ÆÄÀÏÀÌ µð·ºÅ丮ÀÎÁö, ¸µÅ©ÀÎÁö, ÀåÄ¡ ÆÄÀÏÀÎÁöµîÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. ÀÌ °ªÀ» ºÐ¼®Çϱâ À§ÇÑ ´ÙÀ½°ú °°Àº ¸ÞÅ©·Î¸¦ Á¦°øÇÑ´Ù. °¢ ¸ÞÅ©·Î´Â °Ë»çÇϰíÀÚ ÇÏ´Â ³»¿ëÀÌ ÂüÀ̸é 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÑ´Ù.
    1. S_ISDIR(st_mode) : ÆÄÀÏÀÌ µð·ºÅ丮 ÀÎÁö °Ë»çÇÑ´Ù.
    2. S_ISCHR(st_mode) : ÆÄÀÏÀÌ ¹®ÀÚÀåÄ¡ ÆÄÀÏÀÎÁö °Ë»çÇÑ´Ù.
    3. S_ISREG(st_mode) : ÀÏ¹ÝÆÄÀÏÀÎÁö °Ë»çÇÑ´Ù.
    4. S_ISFIFO(st_mode) : FIFO ȤÀº pipe ÆÄÀÏÀÎÁö °Ë»çÇÑ´Ù.
    5. S_ISLNK(st_mode) : symbolic ¸µÅ© ÀÎÁö °Ë»çÇÑ´Ù.
    6. S_ISSOCK(st_mode) : ¼ÒÄÏ ÆÄÀÏÀÎÁö °Ë»çÇÑ´Ù.

st_mtime, st_atime, st_ctime ¿¡¼­ µÇµ¹·ÁÁÖ´Â ½Ã°£Àº Unix ½Ã°£À¸·Î 1970³â 1¿ù 1ÀÏ 00:00:00 ºÎÅÍ ÇöÀç±îÁö È帥½Ã°£À» ÃʷΠȯ»êÇÑ °ªÀÌ´Ù. ÀÌ ÃÊ·ÎµÈ ½Ã°£À» Àΰ£ÀÌ Àб⠽¬¿î ÇüÅ·Π¸¸µé¾îÁÖ´Â ½Ã°£°ü·Ã ÇÔ¼ö°¡ Àִµ¥, ÀÌµé ³»¿ëÀº µû·Î ´Ù·çµµ·Ï ÇÒ °ÍÀÌ´Ù.

´ÙÀ½Àº ÆÄÀÏÀÇ °¢Á¾ Á¤º¸¸¦ Àоî¿À´Â ÇÁ·Î±×·¥ÀÌ´Ù. ÇÁ·Î±×·¥ÀÇ À̸§Àº stat.c·Î ÇϰڴÙ.
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <pwd.h> 
#include <grp.h> 
 
int main(int argc, char **argv) 
{ 
    int return_stat; 
    char *file_name; 
    struct stat file_info; 
 
    mode_t file_mode; 
 
    if (argc != 2 ) 
    { 
        printf("Usage : ./file_info [file name]\n"); 
        exit(0); 
    } 
    file_name = argv[1]; 
 
    if ((return_stat = stat(file_name, &file_info)) == -1) 
    { 
        perror("Error : "); 
        exit(0); 
    } 
 
    file_mode = file_info.st_mode; 
    printf("ÆÄÀÏÀ̸§ : %s\n", file_name); 
    printf("=======================================\n"); 
    printf("ÆÄÀÏ Å¸ÀÔ : "); 
    if (S_ISREG(file_mode)) 
    { 
        printf("Á¤±ÔÆÄÀÏ\n"); 
    } 
    else if (S_ISLNK(file_mode)) 
    { 
        printf("½Éº¼¸¯ ¸µÅ©\n"); 
    } 
    else if (S_ISDIR(file_mode)) 
    { 
        printf("µð·ºÅ丮\n"); 
    } 
    else if (S_ISCHR(file_mode)) 
    { 
        printf("¹®ÀÚ µð¹ÙÀ̽º\n"); 
    } 
    else if (S_ISBLK(file_mode)) 
    { 
        printf("ºí·° µð¹ÙÀ̽º\n"); 
    } 
    else if (S_ISFIFO(file_mode)) 
    { 
        printf("FIFO\n"); 
    } 
    else if (S_ISSOCK(file_mode)) 
    { 
        printf("¼ÒÄÏ\n"); 
    } 
 
    printf("OWNER : %d\n", file_info.st_uid); 
    printf("GROUP : %d\n", file_info.st_gid); 
    printf("dev   : %d\n", file_info.st_dev); 
    printf("inode : %d\n", file_info.st_ino); 
    printf("FILE SIZE IS : %d\n", file_info.st_size); 
    printf("¸¶Áö¸· ÀÐÀº ½Ã°£ : %d\n", file_info.st_atime); 
    printf("¸¶Áö¸· ¼öÁ¤ ½Ã°£ : %d\n", file_info.st_mtime); 
    printf("Çϵ帵ũµÈ ÆÄÀϼö : %d\n", file_info.st_nlink); 
} 
 

Å×½ºÆ® »ï¾Æ¼­ stat.c ¿¡ ´ëÇÑ Á¶»ç¸¦ ÇØº¸ÀÚ.
$ ./stat stat.c 
ÆÄÀÏÀ̸§ : stat.c 
======================================= 
ÆÄÀÏ Å¸ÀÔ : Á¤±ÔÆÄÀÏ 
OWNER : 1000 
GROUP : 1000 
dev   : 2051 
inode : 6603353 
FILE SIZE IS : 1692 
¸¶Áö¸· ÀÐÀº ½Ã°£ : 1196074251 
¸¶Áö¸· ¼öÁ¤ ½Ã°£ : 1196074249 
Çϵ帵ũµÈ ÆÄÀϼö : 2 
 

10.1 hard link¿Í symbolic link

¹Ù·Î À§¿¡¼­ link(ÀÌÇÏ ¸µÅ©)°¡ ¸î¹ø ¾ð±ÞµÇ¾ú¾ú´Ù. ÀÌ ¸µÅ©¿¡ ´ëÇØ¼­ ÀÚ¼¼È÷ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

¸µÅ©´Â ÆÄÀÏÀ» °¡¸®Å°´Â ÀÏÁ¾ÀÇ º°ÄªÀ¸·Î ÁÖ·Î °ü¸®ÀÇ ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î ¿ÀÇ¿ÀÇǽºÀÇ ¹®¼­ ÇÁ·Î±×·¥À» ½ÇÇà½Ã۱â À§Çؼ­ /usr/local/openoffice/bin/openoffice_swrite¸¦ ½ÇÇà½ÃÄÑ¾ß ÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ. À̰бâ¾ïÇØ¼­ ¼öÇà½Ãų·Á¸é º¸Åë °ï¿å½º·¯¿î ÀÏÀÌ ¾Æ´Ò °ÍÀÌ´Ù. ÀÌ °æ¿ì ¸µÅ©¸¦ ÀÌ¿ëÇØ¼­ °£´ÜÇÏ°Ô ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù.
# ln -s /usr/local/openoffice/bin/openoffice_swrite /usr/bin/swrite  
 
/usr/bin Àº ȯ°æº¯¼ö PATH¿¡ µî·ÏÀÌ µÇ¾îÀÖÀ» °ÍÀ̱⠶§¹®¿¡, °£´ÜÇÏ°Ô swrite¸¸ ÀÔ·ÂÇÏ´Â Á¤µµ·Î /usr/local/openoffice/bin/openoffice_swrite ¸¦ ½ÇÇàÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ÀÌÁ¦ ls¸¦ ÀÌ¿ëÇØ¼­ /usr/bin/swrite ÀÇ Á¤º¸¸¦ È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ.
$ ls -al swrite 
lrwxrwxrwx 1 root root 43 2007-11-26 23:44 swrite -> /usr/local/openoffice/bin/openoffice_swrite 
 
swrite°¡ ¿øº» openoffice_swrite ¸¦ ¸µÅ©Çϰí ÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

Á÷°üÀûÀ¸·Î ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª link ´Â µÎ°¡Áö Á¾·ù°¡ ÀÖ´Ù. ½Éº¼¸¯ ¸µÅ©¿Í Çϵ帵ũ°¡ ±×°ÍÀÌ´Ù. À̵ÑÀÇ Â÷ÀÌÁ¡¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

10.2 hard link

¾Õ¼­ ÆÄÀÏÀº ÀåÄ¡³»¿¡¼­ ½Äº°µÇ±â À§Çؼ­ inode ¸¦ °¡Áø´Ù´Â °ÍÀ» ¾ð±ÞÇß¾ú´Ù. ¿©±â¿¡ inode °¡ 1234 ÀÎ ÆÄÀÏ myfileÀÌ ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ. À̰ÍÀ» ´Ù¸¥ Directory¿¡ º¹»çÇϱâ À§ÇÑ °¡Àå ÀϹÝÀûÀÎ ¹æ¹ýÀº ÆÄÀÏÀ» copy ÇÏ´Â °ÍÀ¸·Î À̰æ¿ì »õ·Î¿î inode ¸¦ °¡Áö´Â ÆÄÀÏÀÌ »ý±æ °ÍÀÌ´Ù. ±×·³ cp(1)¸¦ ÀÌ¿ëÇØ¼­ ÆÄÀÏÀ» º¹»çÇØº¸µµ·Ï ÇÏÀÚ.
# mkdir testdir 
# cp myfile testdir/myfile2 
 
ÀÌÁ¦ µÎ°³ ÆÄÀÏÀÇ inode¸¦ È®ÀÎÇØ º¸µµ·ÏÇÏÀÚ. statÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÇÁ·Î±×·¥À» ¸¸µé ÇÊ¿ä´Â ¾ø´Ù. ls ÀÇ -i¿É¼ÇÀ» »ç¿ëÇÏ¸é °£´ÜÇÏ°Ô ÆÄÀÏÀÇ inode °ªÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.
# ls -i myfile  
1131883 myfile  
# ls -i testdir/myfile2 
1163816 testdir/myfile2 
 
³»¿ëÀº µ¿ÀÏÇÏÁö¸¸ ¿ÏÀüÈ÷ ´Ù¸¥ ÆÄÀÏÀÌ »ý¼ºµÇ¾úÀ½À» ¾Ë ¼ö ÀÖ´Ù.

ÀÌ ¹æ¹ýÀº ´ëºÎºÐÀÇ °æ¿ì À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ°ÚÁö¸¸ ÇϳªÀÇ ÆÄÀÏÀ» ¿©·¯°³ÀÇ µð·ºÅ丮¿¡ °øÀ¯ÇÒ ¸ñÀûÀ¸·Î »ç¿ëÇϰíÀÚ ÇÒ °æ¿ì ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ¿¹¸¦ µé¾î ÁÖ¼Ò·Ï ÆÄÀÏÀÎ /home/yundream/mydata.txt °¡ ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ. ÀÌ ÆÄÀÏÀ» /home/dragona ¿¡ °øÀ¯ÇÏ±æ ¿øÇÑ´Ù. ¸¸¾à mydata.txt¿¡ »õ·Î¿î ³»¿ëÀÌ Ãß°¡µÇ°Å³ª »èÁ¦µÇ¸é /home/dragona ¿¡µµ ±×´ë·Î Àû¿ëµÇ¾î¾ß ÇÑ´Ù. ´Ü¼øÈ÷ copy ÇÒ°æ¿ì¿¡´Â ÇÑÂÊ¿¡¼­ º¯°æÇϸé, ´Ù¸¥ ÇÑÂÊ¿¡´Â ¹Ý¿µµÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ¸µÅ©¸¦ »ç¿ëÇϸé ÀÌ ¹®Á¦¸¦ °£´ÜÇÏ°Ô ÇØ°áÇÒ ¼ö ÀÖ´Ù.

# ln mydata.txt /home/dragona 
 
ÀÌÁ¦ ÇÑÂÊ¿¡¼­ ÆÄÀÏÀ» ¼öÁ¤Çغ¸ÀÚ. ´Ù¸¥ Âʵµ ±×´ë·Î ¼öÁ¤µÈ ³»¿ëÀÌ ¹Ý¿µµÇ¾î ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ls -i ·Î È®ÀÎÇØº¸¸é µÎ°³ÀÇ ÆÄÀÏÀÌ µ¿ÀÏÇÑ inode¸¦ °¡Áö°í ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. À̰ÍÀ» ¸µÅ©¶ó°í Çϸç, À§¿¡¼­¿Í °°ÀÌ inode¸¦ °øÀ¯Çؼ­ »ç¿ëÇÏ´Â °ÍÀ» ÇÏµå ¸µÅ© ¶ó°í ÇÑ´Ù. ÀÌÇØÇϱ⠽±°Ô ±×¸²À¸·Î ³ªÅ¸³»º¸ÀÚ¸é ´ÙÀ½°ú °°´Ù.

inode.png

file_name 1°ú file_name2 °¡ ¼­·Îµ¿ÀÏÇÑ inode¸¦ °¡¸®Å°°í ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ Çϵ帵ũ·Î ¾òÀ» ¼ö ÀÖ´Â ÀåÁ¡Àº µ¥ÀÌÅ͸¦ °øÀ¯ÇÒ ¼ö ÀÖ´Ù´Â °Í ¿Ü¿¡, µð½ºÅ©¸¦ ¾Æ³¥ ¼ö ÀÖ´Ù´Â ÀåÁ¡µµ °¡Áø´Ù. µ¥ÀÌÅ͸¦ Á÷Á¢º¹»çÇÏ´Â°Ô ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. ¿øº»Àº ÇϳªÀ̰í inode ¸¸ °øÀ¯ÇÒ »ÓÀÌ´Ù. Çϵ帵ũ¸¦ Çϳª »ý¼ºÇϸé inode °øÀ¯ Ä«¿îÅͰ¡ 1Áõ°¡ÇÒ »ÓÀÌ´Ù. ls -al ·Î mydata.txt ¿øº»ÆÄÀÏÀÇ Á¤º¸¸¦ È®ÀÎÇØ º¸ÀÚ
# ls -al mydata.txt 
-rw-r----- 2 yundream yundream 192 2007-11-26 23:57 mydata.txt 
 
Çϵ帵ũ Ä«¿îÅͰ¡ Çϳª Áõ°¡Çؼ­ 2°¡ µÇ¾î ÀÖ´Â°É È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÆÄÀÏÀ» Çϳª Áö¿ì°í ³ª¼­ ls °á°ú¸¦ º¸¸é Ä«¿îÅͰ¡ Çϳª Áپ 1ÀÌ µÇ´Â°É È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

Çϵ帵ũ¸¦ »ç¿ëÇÒ ¶§, ÁÖÀÇÇØ¾ßÇÒ Á¡ÀÌ ÀÖ´Ù. Çϵ帵ũ´Â inode ¸¦ °¡¸®Å²´Ù. ÀÌ ¶§, inode ´Â ÇϳªÀÇ ÀåÄ¡¿¡¼­¸¸ À¯ÀÏÇϹǷΠ´Ù¸¥ ÀåÄ¡·ÎÀÇ Çϵ帵ũ´Â ºÒ°¡´É ÇÏ´Ù´Â Á¡ÀÌ´Ù. ¿Ö³ÄÇÏ¸é ´Ù¸¥ ÀåÄ¡¿¡¼­ À¯ÀÏÇÏ´Ù´Â °ÍÀ» º¸ÀåÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ÀÌ·± °æ¿ì¿¡´Â ½Éº¼¸¯¸µÅ©¸¦ »ç¿ëÇØ¾ß ÇÒ °ÍÀÌ´Ù.

11 ½Éº¼¸¯ ¸µÅ©

ÀÌ¿Í ´Þ¸® ½Éº¼¸¯ ¸µÅ©´Â º°µµÀÇ inode¸¦ °¡Áö´Â ÆÄÀÏ·Î ¿øº»ÆÄÀÏ¿¡ ´ëÇÑ inode¿Í ÇÔ²² ÀåÄ¡ Á¤º¸±îÁö¸¦ °¡Áö°í ÀÖ´Ù. ¾î¶²ÆÄÀÏ¿¡ ´ëÇÑ inode¿Í ÀåÄ¡Á¤º¸¸¦ ¾Ë°í ÀÖ´Ù¸é, Àü ½Ã½ºÅÛ¿¡¼­ À¯ÀÏÇÑ ÆÄÀÏÀ» °¡¸®Å³ ¼ö Àֱ⠶§¹®¿¡ ÀåÄ¡¿¡ °ü°è¾øÀÌ ¸µÅ©¸¦ °É ¼ö ÀÖ°Ô µÈ´Ù.

inode2.png

±×·³ mydata.txt ¸¦ ¿øº»ÆÄÀÏ·Î ÇÏ´Â ½Éº¼¸¯¸µÅ© mydata2.txt¸¦ ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. ln ¸í·É¿¡ -s¿É¼ÇÀ» ÁÖ¸é ½Éº¼¸¯¸µÅ©¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù.
# ln -s mydata.txt mydataln.txt 
 
ÀÌÁ¦ -i ¿É¼ÇÀ» ÀÌ¿ëÇØ¼­ µÎ°³ ÆÄÀÏÀÇ inode¸¦ ºñ±³ÇØ º¸¸é ¼­·Î ´Ù¸¥ º°°³ÀÇ inode¸¦ À¯ÁöÇϰí ÀÖÀ½À» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ls -l À» ÀÌ¿ëÇØ¼­ ½Éº¼¸¯¸µÅ©°¡ °¡¸®Å°´Â ¿øº»ÆÄÀÏÀÇ À̸§À» ¾ò¾î¿Ã ¼ö ÀÖ´Ù.

# ls -l mydataln.txt  
lrwxrwxrwx 1 yundream yundream 10 2007-11-28 01:49 mydataln.txt -> mydata.txt 
 

12 Ç¥ÁØÀԷ ǥÁØÃâ·Â Ç¥ÁØ¿¡·¯

ÇÁ·Î±×·¥Àº ¾î¶² °ªÀ» ÀÔ·Â ¹Þ¾Æ¼­ ó¸®ÇÏ°í ±× °á°ú¸¦ Ãâ·ÂÇÏ´Â ÀÏÀ» ÇÑ´Ù. ÀÔ·ÂÀº º¸Åë Űº¸µå¸¦ ÅëÇØ¼­ ÀÌ·ç¾îÁö°í Ãâ·ÂÀº ¸ð´ÏÅ͸¦ ÅëÇØ¼­ ÀÌ·ç¾îÁø´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¥ÀÌ ÀÌ·¯ÇÑ ÀÔ/Ãâ·Â ¹æ½ÄÀ» »ç¿ëÇÑ´Ù.

ÇØ¼­ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ¶§¿¡´Â ±âº»ÀûÀ¸·Î Űº¸µåÀåÄ¡¿Í ¸ð´ÏÅÍÀåÄ¡¸¦ ¿­¾î¼­ ÀÔÃâ·ÂÀÌ °¡´ÉÇÏ°Ô ÇØ³õ¾Ò´Ù. ÀÌ·¸°Ô Űº¸µå ÀåÄ¡¸¦ ÅëÇÑ ÀÔ·ÂÀ» Ç¥ÁØÀÔ·ÂÀ̶óÇÏ°í ¸ð´ÏÅ͸¦ ÅëÇØ Ãâ·ÂÇÏ´Â °ÍÀ» Ç¥ÁØÃâ·ÂÀ̶ó°í ÇÑ´Ù.

Űº¸µå¸¦ ÅëÇÑ ÀÔ·ÂÀ» Ç¥ÁØÀÔ·ÂÀ̶ó°í Á¤ÀÇ ÇÏ´Â°Ç ¹®Á¦°¡ ¾ø´Ù. ±×·¯³ª ¸ð´ÏÅ͸¦ ÅëÇÑ Ç¥ÁØÃâ·Â¿¡´Â ¾à°£ÀÇ ¹®Á¦°¡ ÀÖ´Ù. ÇÁ·Î±×·¥ÀÌ ¸ð´ÏÅÍ¿¡ Ãâ·ÂÇÏ´Â Á¤º¸¿¡´Â ÀÔ·Â µ¥ÀÌÅ͸¦ Á¤»óÀûÀ¸·Î ó¸®Çؼ­ ³ª¿À´Â °á°ú°ª¿Ü¿¡ À߸ø 󸮵Ǿ Ãâ·ÂµÇ´Â °á°ú°ªÀÌ Àֱ⠶§¹®ÀÌ´Ù. µ¡¼À ÇÁ·Î±×·¥À» ¸¸µé¾ú´Âµ¥, ÇÇ¿¬»êÀÚ¿¡ ¼ýÀÚ´ë½Å ¾ËÆÄºª ¹®ÀÚµîÀ» ³Ö¾ú´Ù¸é, ÇÁ·Î±×·¥Àº ¿¡·¯¸Þ½ÃÁö¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù. ±×·±µ¥ ¶È°°ÀÌ ¸ð´ÏÅÍ¿¡ Ãâ·ÂÀÌ µÇ¾î¹ö¸®¸é, °á°ú°ªÀÌ ¿¡·¯ÀÎÁö ¾Æ´ÑÁö ±¸ºÐÇÒ ¼ö°¡ ¾øÀ» °ÍÀÌ´Ù.

ÀÌ·¸°Ô Ãâ·Â°ªÀÌ Á¤»óÀÎÁö ¿¡·¯ÀÎÁö¸¦ ±¸ºÐÇϱâ À§Çؼ­ Ç¥ÁØÃâ·Â¿Ü¿¡ Ç¥ÁØ¿¡·¯¸¦ Á¦°øÇÑ´Ù. °á°úÀûÀ¸·Î ÇÁ·Î±×·¥Àº ÃÖÃÊ ½ÇÇà½Ã ´ÙÀ½°ú °°Àº 3°³ÀÇ ÀÔÃâ·Â ÀåÄ¡¸¦ openÇÏ°Ô µÈ´Ù.
  • Ç¥ÁØÀÔ·Â : Űº¸µå¸¦ ÅëÇÑ ÀÔ·Â
  • Ç¥ÁØÃâ·Â : ¸ð´ÏÅÍ·Î Ãâ·ÂµÇ´Â Á¤»ó ¸Þ½ÃÁö
  • Ç¥ÁØ¿¡·¯ : ¸ð´ÏÅÍ·Î Ãâ·ÂµÇ´Â ¿¡·¯ ¸Þ½ÃÁö

¿ì¸®´Â ¸®´ª½º´Â ¸ðµç°ÍÀ» ÆÄÀϷΠó¸®ÇÑ´Ù´Â °ÍÀ» ¹è¿ö¼­ ¾Ë°í ÀÖ´Ù. Ç¥ÁØÀÔ·Â,Ãâ·Â,¿¡·¯ ¿ª½Ã ÆÄÀϷΠ󸮵ȴÙ. ´õºÒ¾î ¸®´ª½º¿¡¼­ ÆÄÀÏÀ» ´Ù·ê¶§¿¡´Â ÆÄÀÏÀ̸§ÀÌ ¾Æ´Ñ, ÆÄÀÏÁöÁ¤¹øÈ£¸¦ ÀÌ¿ëÇÑ´Ù´Â °Íµµ ¾Ë°í ÀÖ´Ù. ¸®´ª½º´Â À̵é 3°³ÀÇ ÆÄÀÏ¿¡ ´ëÇØ¼­´Â ¾Æ¿¹ °íÀ¯¹øÈ£¸¦ ÁöÁ¤Çϰí ÀÖ´Ù.
  • Ç¥ÁØÀÔ·Â : 0
  • Ç¥ÁØÃâ·Â : 1
  • Ç¥ÁØ¿¡·¯ : 2

´ÙÀ½Àº Ç¥ÁØÀÔ·Â, Ç¥ÁØÃâ·Â, Ç¥ÁØ¿¡·¯¸¦ ÀÌ¿ëÇØ¼­ ¸¸µç °£´ÜÇÑ ³ª´°¼À ÇÁ·Î±×·¥ÀÌ´Ù. Ç¥ÁØÀÔ·ÂÀ» ÅëÇØ¼­ 2°³ÀÇ ¼ö¸¦ ÀԷ¹޾Ƽ­ ³ª´« °á°ú¸¦ Ç¥ÁØÃâ·ÂÀ» ÅëÇØ¼­ Ãâ·ÂÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥ÀÇ À̸§Àº stdio.c ·Î ÇϰڴÙ.
001  #include <unistd.h>
002  #include <sys/types.h>
003  #include <fcntl.h>
004  #include <stdio.h>
005  #include <string.h>
006  
007  #define STDIN  0
008  #define STDOUT 1
009  #define STDERR 2
010  
011  #define ERRMSG "Devide Not Zero\n"
012  int main()
013  {
014    int a;
015    int b;
016    char buf[80];
017  
018    read(STDIN, buf, 80);
019    a = atoi(buf);
020  
021    read(STDIN, buf, 80);
022    b = atoi(buf);
023    if (b == 0)
024    {
025      write(STDERR, ERRMSG, strlen(ERRMSG));
026      return 1;
027    }
028  
029    sprintf(buf, "%d / %d = %d\n", a, b, (int)(a/b));
030  
031    write(STDOUT, buf, strlen(buf));
032    return 0;
033  }
034  
  • 18
    Ç¥ÁØÀÔ·ÂÀ¸·Î ºÐÀÚ¸¦ ÀԷ¹޴´Ù. Űº¸µå·Î ºÎÅÍ ÀԷ¹޴ °ªÀº ¹®ÀÚ¿­·Î atoi(3) ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ intÇü °ªÀ¸·Î º¯°æÇß´Ù.
  • 21
    Ç¥ÁØÀÔ·ÂÀ¸·Î ºÐ¸ð¸¦ ÀԷ¹޴´Ù.
  • 23 ~ 27
    ³ª´°¼À¿¡¼­´Â ºÐ¸ð°¡ 0ÀÌ µÇ´Â°É Çã¿ëÇÏÁö ¾Ê°í ÀÖ´Ù. ±×·¯³ª ½Ç¼ö·Î 0À» ÀÔ·ÂÇÒ ¼ö ÀÖÀ¸¹Ç·Î, ÀԷ°ªÀ» °Ë»çÇØ¼­ 0ÀÌ¸é ¿¡·¯¸Þ½ÃÁö¸¦ Ãâ·ÂÇϰí Á¾·áÇϵµ·Ï Çϰí ÀÖ´Ù. À̶§ °á°ú°ªÀº ¿¡·¯¸Þ½ÃÁö À̹ǷΠǥÁØ¿¡·¯¸¦ ÅëÇØ¼­ Ãâ·ÂÇß´Ù.
  • 31
    ³ª´« °á°ú°ªÀ» Ç¥ÁØÃâ·ÂÀ» ÀÌ¿ëÇØ¼­ ¸ð´ÏÅÍ¿¡ Ãâ·ÂÇÑ´Ù.

Ç¥ÁØÃâ·Â°ú Ç¥ÁØÀÔ·ÂÀ» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ÀÌÇØÇÏ´Â °ÍÀº ¾î·ÆÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¯³ª Ç¥ÁØ¿¡·¯¸¦ ¾î¶»°Ô »ç¿ëÇØ¾ß ÇÒÁö´Â °¨ÀÌ¿ÀÁö ¾ÊÀ» °ÍÀÌ´Ù. °ÆÁ¤ÇÒ ÇÊ¿ä ¾ø´Ù. ¾Æ·¡ÀÇ ÀçÁöÇâÀ» °øºÎÇÏ´Ù º¸¸é, ÀÚ¿¬½º·´°Ô °¨ÀÌ ¿À°Ô µÉ °ÍÀÌ´Ù.

13 ÀÔÃâ·Â ÀçÁöÇâ

ÀÔÃâ·Â ÀçÁöÇâ ȤÀº I/O Redirection¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸ÀÚ. ÀÏ´Ü ÀçÁöÇâÀÇ Àǹ̿¡ ´ëÇØ¼­ ¾Ë°í ³Ñ¾î°¥ Çʿ䰡 ÀÖÀ»°Í °°´Ù. ÀçÁöÇâÀÇ »çÀüÀû Àǹ̴ ´Ù¸¥ ¹æÇâÀ¸·Î º¸³½´Ù ÀÌ´Ù. ¿©±â¿¡ ¸¶Ãß¾î ÀÔÃâ·Â ÀçÁöÇâÀ» »çÀüÀûÀÇ¹Ì ±×´ë·Î ÇØ¼®À» ÇÏÀÚ¸é, ÀԷ°ú Ãâ·ÂÀ» ´Ù¸¥ ¹æÇâÀ¸·Î º¸³½´Ù°¡ µÉ °ÍÀÌ´Ù. ½ÇÁ¦ ÀÔÃâ·Â ÀçÁöÇâÀº »çÀüÀûÀÇ¹Ì ±×´ë·Î ÀÌÇØÇÏ¸é µÈ´Ù.

¸®´ª½º¿¡¼­ ¸ðµç °ÍÀº ÆÄÀÏ·Î ´Ù·ç¾îÁø´Ù°í Çß´Ù. ÀÌ´Â ÀԷ°ú Ãâ·Â¿¡µµ ¿¹¿Ü¾øÀÌ Àû¿ëÀÌ µÇ¹Ç·Î, ÀԷ°ú Ãâ·ÂÀ» ´Ù¸¥ ¹æÇâÀ¸·Î º¸³½´Ù´Â ÀԷ°ú Ãâ·ÂÀ» ´Ù¸¥ ÆÄÀÏ·Î º¸³½´Ù¿Í µ¿ÀÏÇÔÀ» ÀǹÌÇÑ´Ù. ¿¹ÄÁµ¥, Űº¸µå·Î ºÎÅÍ ÀÔ·Â ¹ÞÀº µ¥ÀÌÅÍ - Áï Ç¥ÁØÀÔ·Â - ÀÏ¹Ý ÆÄÀÏ·Î º¸³»°Å³ª ÇÁ¸°ÅÍ - ÇÁ¸°Å͵µ ÆÄÀÏÀ̴ϱî·Î º¸³»´ÂµîÀÇ ÀÏÀÌ °¡´ÉÇÏ´Ù´Â ¾ê±â°¡ µÈ´Ù. ÀÏ¹Ý ÆÄÀÏÀ» ÇÁ¸°ÅÍ·Î º¸³»°Å³ª, Ç¥ÁØÃâ·ÂÀ» Ç¥ÁØ¿¡·¯·Î º¸³»´Â µîÀÇ ÀÏ¿ª½Ã °¡´ÉÇÏ´Ù. ¸ðµç °ÍÀÌ ÆÄÀÏÀ̱⠶§¹®¿¡ ¸ðµç ¹æÇâÀ¸·ÎÀÇ ÀçÁöÇâÀÌ °¡´ÉÇÏ´Ù.

stdio.c ÆÄÀÏÀ» ¿¹·Î µé¾î¼­ ¼³¸íÇØº¸µµ·Ï ÇϰڴÙ.

stdio.c ÇÁ·Î±×·¥Àº ÀÔ·ÂÀ» °Ë»çÇØ¼­ ºÐ¸ð°¡ 0ÀÌ µÇ¸é, ¿¡·¯¸Þ½ÃÁö¸¦ Ãâ·ÂÇϵµ·Ï Çß´Ù. ÀÌ ¿¡·¯¸Þ½ÃÁö´Â Ç¥ÁØ¿¡·¯ ÇüÅ·Π¸ð´ÏÅÍ¿¡ Ãâ·ÂµÈ´Ù. ÀÔ·ÂÀÌ Á¦´ë·Î ÀÌ·ç¾îÁ®¼­ °á°ú°ªÀÌ ³ª¿Ã°æ¿ì¿¡´Â Ç¥ÁØÃâ·Â ÇüÅ·Π¸ð´ÏÅÍ¿¡ Ãâ·ÂÀÌ µÈ´Ù. ÀÌ°É ÆÄÀÏ·Î ÀçÁöÇâ ÇØº¸µµ·Ï ÇÏÀÚ.

½©¿¡¼­´Â ²©¼è¸¦ ÀÌ¿ëÇØ¼­ ÀçÁöÇâÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. Ç¥ÁØÃâ·ÂÀ» result.txt ÆÄÀÏ·Î ÀçÁöÇâÇÏ°í °á°ú¸¦ È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ.
# ./stdio > result.txt 
1234 
2 
# cat result.txt 
1234 / 2 = 617 
 

ÇÁ·Î±×·¥À» ¸¸µé¾î¼­ Å×½ºÆ® ÇÒ°æ¿ì µð¹ö±ëµîÀÇ ¸ñÀûÀ¸·Î ¿¡·¯¸Þ½ÃÁö¸¦ ÆÄÀÏ·Î µû·Î ÀúÀåÇØµÖ¾ß ÇÒÇʿ䰡 »ý±ä´Ù. ±×·¸´Ù¸é stdioÀÇ Ç¥ÁØ¿¡·¯¸¦ ÆÄÀÏ·Î ÀçÁöÇâ ½ÃŰ¸é µÉ°ÍÀÌ´Ù.
# ./stdio 2> err.txt 
1000 
0 
# cat err.txt 
Devide Not Zero 
 
Ç¥ÁØ¿¡·¯¸¦ Ç¥ÁØÃâ·ÂÀ¸·Î ÀçÁöÇâ ½Ãų ¼öµµ ÀÖ´Ù.
# ./stdio 2>1&  
 
ÀÌÁ¦ Ç¥ÁØ¿¡·¯µµ Ç¥ÁØÃâ·Â ÇüÅ·Π¸ð´ÏÅÍ¿¡ »Ñ·ÁÁö°Ô µÈ´Ù. Ç¥ÁØ¿¡·¯¸¦ Ç¥ÁØÃâ·ÂÀ¸·Î ÀçÁöÇâ ½ÃŰ´Â ¿¹´Â grep µîÀ» ÀÌ¿ëÇØ¼­ °á°ú¸¦ ¸ð´ÏÅ͸µ ÇÏ´Â ½ºÅ©¸³Æ®¸¦ ¸¸µé±â À§Çؼ­ ÀÚÁÖ ÀÌ¿ëµÈ´Ù. ¾Æ·¡ÀÇ °æ¿ì¸¦ º¸µµ·Ï ÇÏÀÚ.
# ./stdio | grep Not  > err.log 
 
À§ÀÇ ½ºÅ©¸³Æ®´Â stdioÀÇ ½ÇÇà°á°úÁß ºÐ¸ð°¡ 0ÀÎ °æ¿ì¸¦ err.log·Î ³²±â±â À§ÇÑ ¸ñÀûÀ¸·Î ÀÛ¼ºµÇ¾ú´Ù. ±×·¸Áö¸¸ ¿¹»ó°ú´Â ´Ù¸£°Ô ºÐ¸ð°¡ 0ÀÎ °æ¿ìµµ err.log·Î ³²°ÜÁöÁö ¾ÊÀ» °ÍÀÌ´Ù. ¿Ö³ÄÇÏ¸é ÆÄÀÌÇÁ |´Â Ç¥ÁØÃâ·Â °á°ú¸¸À» grep·Î ³Ñ±â´Âµ¥ Device Not Zero´Â Ç¥ÁØ¿¡·¯À̹ǷΠÆÄÀÌÇÁ¸¦ ÅëÇØ¼­ grep·Î ³Ñ¾î°¡Áö ¾Ê±â ¶§¹®ÀÌ´Ù.

À̶§ Ç¥ÁØ¿¡·¯¸¦ Ç¥ÁØÃâ·ÂÀ¸·Î ÀçÁöÇâ ½ÃŰ´Â ¹æ¹ýÀ¸·Î ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. À§ÀÇ ½ºÅ©¸³Æ®¸¦ ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇÑ´ÙÀ½¿¡ Å×½ºÆ®Çغ¸µµ·Ï ÇÏÀÚ.
# ./stdio 2>&1 | grep Not > err.log 
1000 
0 
# cat err.log 
Devide Not Zero 
 
Ç¥ÁØÃâ·Â°á°ú°¡ ÆÄÀÏ·Î ÀúÀåµÈ°É È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÀÌ·ÐÀûÀ¸·Î´Â ÆÄÀÏ¿¡ ÀúÀåµÈ ³»¿ëÀ» °¢ ÀåÄ¡¿¡ ÀçÁöÇâ ½ÃŰ´Â °Í¸¸À¸·Îµµ ÇØ´ç ÀåÄ¡¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µéÀÚ¸é wav ÆÄÀÏÀ» Àо »ç¿îµåÄ«µå¸¦ °¡¸®Å°´Â ÀåÄ¡ÆÄÀÏ¿¡ ÀçÁöÇâ ½ÃÄѼ­ wav ÆÄÀÏÀ» Ç÷¹ÀÌ ÇÏ´Â °ÍÀÌ´Ù.
# cat sound.wav > /dev/audio 
 

ÀçÁöÇâÀÇ °³³ä¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸¾Ò´Âµ¥, Á¤ÀÛ Áß¿äÇÑ°Ç ÀçÁöÇâÀÌ ½Ã½ºÅÛ ÇÁ·Î±×·¡¹ÖÀÇ °üÁ¡¿¡¼­ ¾î¶»°Ô ±¸ÇöÀÌ µÇ´Â°¡ ÇÏ´Â °ÍÀÌ´Ù. °£´ÜÈ÷ »ý°¢ÇØ º¸ÀÚ¸é, µÎ°³ÀÇ ÆÄÀÏÀ» ¿¬´ÙÀ½¿¡ ÇϳªÀÇ ÆÄÀÏÀÇ ³»¿ëÀ» Àо ´Ù¸¥ ÆÄÀÏ·Î º¹»çÇÏ¸é µÈ´Ù. Ç¥ÁØÃâ·ÂÀ» ÆÄÀÏ·Î ÀçÁöÇâÇÑ´Ù¸é, Ç¥ÁØÃâ·Â°ú ÆÄÀÏÀ» ¿¬´ÙÀ½¿¡ Ç¥ÁØÃâ·ÂÀÇ ³»¿ëÀ» Àо ÆÄÀÏ¿¡ ±×´ë·Î ¾²´Â Çü½ÄÀÌ´Ù.

±×·¯³ª ÀÌ ¹æ½ÄÀº ¸Å¿ì º¹ÀâÇÏ´Ù. À̺¸´Ù´Â dup2()ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ Á»´õ °£´ÜÇÏ°Ô ÀçÁöÇâÀ» ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ¾Æ·¡ÀÇ Äڵ带 ÄÄÆÄÀÏ ÇÑ´ÙÀ½ ½ÇÇà½ÃÄÑ º¸µµ·Ï ÇÏÀÚ.
001  #include <unistd.h>
002  #include <sys/types.h>
003  #include <sys/stat.h>
004  #include <fcntl.h>
005  #include <stdio.h>
006  #include <string.h>
007  
008  #define STDIN  0
009  #define STDOUT 1
010  #define STDERR 2
011  
012  int main(int argc, char **argv)
013  {
014    int fd;
015    fd = open("test.log", O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP);
016    fd = dup2(fd, STDOUT);
017    printf("Hello World %d\n", fd);
018  }
019  
  • 15 : ÀçÁöÇâÇÒ ÆÄÀÏ·Î test.log¸¦ ¿ÀÇÂÇß´Ù. fd´Â ¾Æ¸¶µµ 3ÀÏ °ÍÀÌ´Ù.
  • 16 : dup2()ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ fd¸¦ STDOUT·Î º¹»çÇß´Ù.
  • 17 : printf ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ Ç¥ÁØÃâ·ÂÇßÁö¸¸ STDOUT´Â test.logÀÇ ÆÄÀÏÁöÁ¤ÀÚ·Î º¹»ç°¡ µÇ¾ú±â ¶§¹®¿¡, ¸ð´ÏÅÍ·Î Ãâ·ÂÀÌ µÇ´À³Ø ¾Æ´Ï°í ÆÄÀÏ·Î Ãâ·ÂÀÌ µÈ´Ù.
ÀÌÁ¤µµ¸é ÀçÁöÇâÀÇ ±¸Çö°³³ä¿¡ ´ëÇØ¼­ Á¤¸®°¡ µÇ¾úÀ¸¸®¶ó »ý°¢µÈ´Ù. dup¿Í dup2´Â ÇÁ·Î¼¼½º°£ ÀÔÃâ·ÂÀ» °øÀ¯Çϱâ À§ÇÑ ¿ëµµ·Î ³ªÁß¿¡ÀÚ¼¼È÷ ¾ð±ÞÀÌ µÉ °ÍÀÌ´Ù. ¿ì¼±Àº ÀÌ·± ÇÔ¼ö°¡ ÀÖ´Ù´Â Á¤µµ¸¸ ÀÌÇØÇÏ°í ³Ñ¾î°¡µµ·Ï ÇÏÀÚ.

14 ÀÔÃâ·Â ¹öÆÛ ºñ¿ì±â

ÀϹÝÀûÀ¸·Î ¹öÆÛ´Â ¼º´ÉÀ» ³ôÀ̱â À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù. ¿¹ÄÁµ¥, 1byte¾¿ 2048¹ø ¾²´Â °Í º¸´Ù´Â , 1024byte¾¿ 2¹ø ¾²´Â°Ô ÈξÀ È¿À²ÀûÀÏ °ÍÀÌ´Ù. ÀÌ¿¡ ´ëÇÑ ¹®¼­´Â ¹öÆÛÅ©±â°¡ Àбâ/¾²±â ¼º´É¿¡ ¹ÌÄ¡´Â ¿µÇâ¹®¼­¸¦ Àо±â ¹Ù¶õ´Ù.

ÀϹÝÀÀ¿ë Â÷¿ø¿¡¼­ »Ó¸¸ ¾Æ´Ï¶ó, ¿î¿µÃ¼Á¦Â÷¿ø¿¡¼­µµ ÀÌ·¯ÇÑ ±ÔÄ¢Àº µ¿ÀÏÇÏ°Ô Àû¿ëµÈ´Ù. ÀÌ¿¡ µû¶ó ÀԷ°ú Ãâ·Â¿¡ ´ëÇØ¼­µµ º°µµÀÇ ¹öÆÛ¸¦ À¯ÁöÇÏ°Ô µÈ´Ù. ¿¹¸¦µé¾î write(2)¸¦ ÀÌ¿ëÇØ¼­ È­¸é¼­ µ¥ÀÌÅ͸¦ Ãâ·ÂÇÑ´Ù°í Çϸé, 1byte¾¿ ¾µ¶§¸¶´Ù Ãâ·ÂµÇ´Â°Ô ¾Æ´Ï°í, ¹öÆÛ¿¡ ½×¾ÆµÎ°í ÀÖ´Ù°¡ ¹öÆÛ°¡ °¡µæ áÀ» ¶§ Ãâ·ÂÀ» ÇÏ°Ô µÈ´Ù.

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
 
int main(int argc, char **argv) 
{ 
  int i = 1; 
  while(1) 
  { 
    printf("%d",i); 
    usleep(100); 
  } 
} 
 
À§ Äڵ带 ½ÇÇà½ÃÄÑ º¸±â ¹Ù¶õ´Ù. ¹öÆÛ°¡ °¡µæÂ÷±â Àü±îÁö´Â È­¸é¿¡ Ãâ·Â½ÃŰÁö ¾Ê´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´ë°³ÀÇ °æ¿ì ¹öÆÛÀÇ Å©±â´Â 1024À̹ǷÎ, 1024°³ÀÇ ¹®ÀÚ°¡ ±â·ÏµÇ¾úÀ» ¶§, Çѹø¿¡ È­¸é¿¡ Ãâ·ÂµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

±×·¯³ª ¶§¶§·Î, °ð¹Ù·Î ¹öÆÛ°¡ ä¿öÁö±â Àü¿¡ ¹öÆÛÀÇ ³»¿ëÀ» ÆÄÀÏ¿¡ ¾²°í, ¹öÆÛ¸¦ ºñ¿ï Çʿ䰡 ÀÖÀ» °ÍÀÌ´Ù. ¸¸¾à ¹öÆÛ°¡ ´Ù ä¿öÁöÁö ¾Ê¾Æ¼­ ÆÄÀÏ¿¡ ¾²Áö ¾ÊÀº »óÅ¿¡¼­ ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ¾î ¹ö¸°´Ù¸é, ¹öÆÛ¿¡ ÀÖ´Â ³»¿ëÀº ³¯¾Æ°¡ ¹ö¸± °ÍÀÌ´Ù. À§ÀÇ ÇÁ·Î±×·¥À» Áß°£¿¡ Ctrl+C¸¦ ´­·¯¼­ Á¾·á½ÃÄÑ º¸±â ¹Ù¶õ´Ù. ¹öÆÛÀÇ ³»¿ëÀÌ ¹ö·ÁÁüÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. À̶§ ¾²´Â ÇÔ¼ö°¡ fflush()·Î, ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ°Ô µÇ¸é, ¹öÆÛÀÇ ³»¿ëÀ» Áï½Ã ÆÄÀÏ¿¡ ¾²°Ô µÈ´Ù.

À§ Äڵ带 ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤Çغ¸ÀÚ.
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
 
int main(int argc, char **argv) 
{ 
  int i = 1; 
  while(1) 
  { 
    printf("%d",i); 
    fflush(stdout); 
    usleep(100); 
  } 
} 
 
ÀÌÁ¦ ¸Å¹ø ¹öÆÛ¿¡ ÀÖ´Â ³»¿ëÀ» ÆÄÀÏ(¿©±â¿¡¼­´Â ¸ð´ÏÅÍ)¿¡ ¾²´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

15 »ç¿ëÇÑ ÇÔ¼öµé Á¤¸®

  • open(2) : ÆÄÀÏÀ» ¿¬´Ù.
  • write(2) : ÆÄÀÏÀ» ¾´´Ù.
  • read(2) : ÆÄÀÏÀÇ ³»¿ëÀ» Àд´Ù.
  • close(2) : ¿­¸° ÆÄÀÏÀ» ´Ý´Â´Ù.
  • printf(3) : ¹®ÀÚ¿­À» È­¸é¿¡ Ç¥ÁØÃâ·Â ÇÑ´Ù.
  • dup2(2) : ÆÄÀÏÁöÁ¤¹øÈ£¸¦ º¹»çÇÑ´Ù.
  • perror(3) : ¿¡·¯¸Þ½ÃÁö¸¦ Ç¥ÁØ¿¡·¯·Î Ãâ·ÂÇÑ´Ù.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.